0

Fragment私は自分のアプリケーションで3秒を使用しました。3つ目はListfragmentです。にTwitterフィードをロードListfragmentonActvityCreated()ます。

ここで問題となるの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

4

1 に答える 1

0

onActivityCreatedメインスレッドのコールバック内でネットワーク接続とデータフェッチを行っているようです。これにより、メイン スレッドがブロックされ、UI が応答しなくなります。Twitter から非同期的にデータをロードする必要があります。おそらくこれに使用する必要がありますAsyncTaskLoader

于 2012-09-06T06:12:45.330 に答える