我在我的应用程序中使用了3 Fragment
个。第三个是Listfragment
。我在Listfragment
中的onActvityCreated()
加载了Twitter Feed。
现在问题是当我移动到第二个ListFragment
时创建了Fragment
,这意味着它开始加载推特源。直到第3 Fragment
次收到Feed时,这需要很长时间的慢速连接,我的第二个Fragment
完全没有响应。我无法点击任何图标或滑动到第一个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
答案 0 :(得分:0)
您似乎正在主线程上的onActivityCreated
回调中进行网络连接和数据获取。这会阻止主线程并使UI无响应。您应该从Twitter 异步加载数据。您可能应该使用AsyncTaskLoader
。