SIN@SAPPOROWORKSの覚書

C#を中心に、夜な夜な試行錯誤したコードの記録です。

Xamarin.Android ListVIew(Twitterクライアント風味)

【 Xamarin 記事一覧 】

1 Tweetinvi API

せっかくListViewの使い方を学んだので、ちょっとTwitter風味に表示してみました。
Twitterへのアクセスは、「Tweetinvi a friendly Twitter C# API」を使用させて頂きました。

https://tweetinvi.codeplex.com/

NuGetで取得なので、パッケージマネージャコンソールから「Install-Package TweetinviAPI」とタイプするだけです。

a001

2 実装

a002

「xamarin」という文字列を日本語対象で検索して表示しただけです。

1アイテムのデータ構造を定義しました。

public class ListItem{
   public Bitmap Icon; //投稿者アイコン
   public string Name; //名前
   public string Text; //メッセージ
   public string CreateAt; //作成日時
}

表示カスタマイズ用のAdapterクラスです。

public class MyAdapter : ArrayAdapter<ListItem>{
    private readonly LayoutInflater _layoutInflater;
    public MyAdapter(Context context, int rid, IList<ListItem> list)
        : base(context, rid, list){
        _layoutInflater = (LayoutInflater) context.GetSystemService(Context.LayoutInflaterService);
    }
    public override View GetView(int position, View convertView, ViewGroup parent){
        //データを取り出す
        var item = GetItem(position);
        //レイアウトファイルからViewを作成
        var view = _layoutInflater.Inflate(Resource.Layout.ListItem, null);
        //投稿者アイコン
        var icon = view.FindViewById<ImageView>(Resource.Id.imageIcon);
        icon.SetImageBitmap(item.Icon);
        //名前
        var name = view.FindViewById<TextView>(Resource.Id.textName);
        name.Text = item.Name;
        //コメント
        var text = view.FindViewById<TextView>(Resource.Id.textText);
        text.Text = item.Text;
        //作成日時
        var textCreateAt = view.FindViewById<TextView>(Resource.Id.textCreateAt);
        textCreateAt.Text = item.CreateAt;
        return view;
    }
}

メインは、こんな感じになります。

//TweetinviAPI 認証情報の初期化
const string accessToken = "XXXXa9xOKb4EvKrxi";
const string accessTokenSecret = "XXXXXlu8Iq8vy";
const string consumerKey = "XXXXXXxWneCwGp";
const string consumerSecret = "XXXXXXXUMNcIrSTiJ";
TwitterCredentials.SetCredentials(accessToken, accessTokenSecret, consumerKey, consumerSecret);

// 「xamarin」を含む、日本語Tweetを検索
var searchParameter = Search.GenerateSearchTweetParameter("xamarin");
searchParameter.Lang = Language.Japanese;
var tweets = Search.SearchTweets(searchParameter);

//検索結果からデータを作成する
var list = new List<ListItem>();
foreach (var tweet in tweets) {
    //投稿者アイコンのURLから画像を作成する
    var url = new URL(tweet.Creator.ProfileImageUrl);  
    var connection = (HttpURLConnection) url.OpenConnection();  
    connection.DoInput = true;  
    connection.Connect();
    var icon = BitmapFactory.DecodeStream(connection.InputStream);

    var listItem = new ListItem(){
        Name = tweet.Creator.Name,//投稿者
        CreateAt = tweet.CreatedAt.ToString(),//作成日時
        Text =  tweet.Text,//メッセージ
        Icon = icon//投稿者アイコン
    };
    list.Add(listItem);
}
            
//ListViewのアダプタにセットする
var listView = FindViewById<ListView>(Resource.Id.listView1);
listView.Adapter = new MyAdapter(this, 0, list);

【 Xamarin 記事一覧 】