###前提・実現したいこと
Twitter4Jを使用してAndroidアプリを作成し、TwitterのStreamingAPIにて受信したツイートのユーザ名と本文をListViewに追加したいです。
その際、新しいツイートをListViewの一番上に追加し、その新しく追加したアイテムが画面の一番上に来るようにスクロールしたいです。
###発生している問題・エラーメッセージ
ツイートを受信した後、スクロールするまでListViewのアイテムが更新されません。
手動でListViewをスクロールするとListViewの内容が更新されます。
###該当のソースコード
package com.example.twitest; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.util.Log; import android.widget.ArrayAdapter; import android.widget.ListView; import twitter4j.*; import twitter4j.conf.Configuration; import twitter4j.conf.ConfigurationBuilder; public class MainActivity extends AppCompatActivity { private static final String CONSUMER_KEY = "***"; private static final String CONSUMER_SECRET = "***"; private static final String ACCESS_TOKEN = "***"; private static final String ACCESS_TOKEN_SECRET = "***"; static ArrayAdapter<String> adapter; static ListView lv; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); adapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1); lv = (ListView)findViewById(R.id.listView); lv.setAdapter(adapter); Configuration conf = new ConfigurationBuilder().setOAuthConsumerKey(CONSUMER_KEY) .setOAuthConsumerSecret(CONSUMER_SECRET).setOAuthAccessToken(ACCESS_TOKEN) .setOAuthAccessTokenSecret(ACCESS_TOKEN_SECRET).build(); TwitterStream twStream = new TwitterStreamFactory(conf).getInstance(); twStream.addListener(new MyStatusListener()); twStream.sample(); } static class MyStatusListener implements StatusListener{ @Override public void onStatus(Status status) { //ツイートを受信した際の処理 //受信したツイートのユーザーネームと本文を取得 String username = status.getUser().getScreenName(); String text = status.getText(); //一番上にユーザーネームと本文の入ったアイテムを追加 adapter.insert("UserName:" + username + " / Text:" + text,0); //adapterに変更を通知する adapter.notifyDataSetChanged(); //ListViewを更新 lv.invalidateViews(); //一番上のアイテムを選択し、画面を上にスクロールする lv.setSelection(0); Log.v("Text:",text); } @Override public void onDeletionNotice(StatusDeletionNotice statusDeletionNotice) { } @Override public void onTrackLimitationNotice(int i) { } @Override public void onScrubGeo(long l, long l1) { } @Override public void onStallWarning(StallWarning stallWarning) { } @Override public void onException(Exception e) { } } }
###試したこと
・ログにはStreamingで受信したツイートが止まらずに流れてくるので、ツイートの受信自体は問題無くできているはずです。
###補足情報(言語/FW/ツール等のバージョンなど)
エミュレータ(Nexus5 Android5.1.1)上で実行しています
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。