Fragment
私は自分のアプリケーションで3秒を使用しました。3つ目はListfragment
です。にTwitterフィードをロードListfragment
しonActvityCreated()
ます。
ここで問題となるのListFragment
は、2番目に移動するとが作成されることFragment
です。つまり、Twitterフィードの読み込みが開始されます。Fragment
遅い接続では時間がかかる3番目にフィードが受信されるまで、2番目Fragment
は完全に応答しなくなります。アイコンをクリックしたり、1番目にスワイプしたりできませんFragment
。これは、Fragment
が破壊されるたびに発生します。
コードは次のとおりです。
@Override
public void onActivityCreated(Bundle savedInstanceState)
{
// TODO Auto-generated method stub
super.onActivityCreated(savedInstanceState);
Log.d("TwitterFragment", "onActivityCreated++++++");
try {
// tw = new TwitterTask();
// tw.execute(null);
final ConnectivityManager connection = (ConnectivityManager) getActivity().getSystemService(Context.CONNECTIVITY_SERVICE);
if (connection.getNetworkInfo(0).isConnected() || connection.getNetworkInfo(1).isConnected()) {
AccessToken a = new AccessToken("something", "something");
Twitter twitter = new TwitterFactory().getInstance();
twitter.setOAuthConsumer(Values.CONSUMER_KEY, Values.CONSUMER_SECRET);
twitter.setOAuthAccessToken(a);
int i = (int) twitter.getId();
User u = twitter.showUser(i);
Log.i("twitter", "user name" + u.getName());
statuses = twitter.getUserTimeline("something");
listAdapter.notifyDataSetChanged();
// Populate list with our static array of titles.
setListAdapter(listAdapter);
getListView().setCacheColorHint(Color.TRANSPARENT);
getListView().setDivider(null);
getListView().setPadding(10, 0, 10, 0);
setRetainInstance(true);
getListView().setClickable(false);
}
} catch (Exception e) {
// TODO: handle exception
Log.i("something", "Failed to get timeline: " + e.getMessage());
}
}
getView()
これは、アダプタのコードです。
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
final tweetViewHolder tweet;
if (convertView == null) {
LayoutInflater inflater = (LayoutInflater) getActivity().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
convertView = inflater.inflate(R.layout.twitterfeed_row, null);
tweet = new tweetViewHolder();
tweet.twitterText = (TextView) convertView.findViewById(R.id.tweet_text);
tweet.tweetTime = (TextView) convertView.findViewById(R.id.tweet_time);
convertView.setTag(tweet);
} else
tweet = (tweetViewHolder) convertView.getTag();
tweet.twitterText.setText(statuses.get(position).getText());
tweet.tweetTime.setText(statuses.get(position).getCreatedAt().toString());
return convertView;
}
class tweetViewHolder {
TextView twitterText;
TextView tweetTime;
// TextView txtThird;
}
@Override
public int getCount() {
// TODO Auto-generated method stub
if (statuses == null)
return 0;
else
return statuses.size();
}
@Override
public Object getItem(int position) {
// TODO Auto-generated method stub
if (statuses != null)
return statuses.get(position);
else
return null;
}
@Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return position;
}
また、ネットワークがない場合のデフォルトProgressDialog
が表示されます。Listfragment
それをどのように制御できますか?それを監視するためにオーバーライドする方法はありますか?
TIA