0

私はTwitter4jを介してホームラインのページネーションを実装し、ChrisBanesからリストを更新しようとしています。しかし、それをどうやって実現するかという問題があります。どのように機能するかについていくつかメモがありますが、そうではありません。プル更新リストが更新されません。次の40件のツイートをアップロードして更新時にリストする方法について何かアイデアはありますか?

アクティビティ

protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.tweetlist);

        initializeVars();
        paging = new Paging(1, 40);

        try {
            ListView actualListView = pullToRefreshView.getRefreshableView();

            tweets = twitter.getHomeTimeline(paging);
            tweetAdapter = new TweetListAdapter(this, R.layout.customtweetlist, tweets);
            actualListView.setAdapter(tweetAdapter);
        } catch (TwitterException e) {
            e.printStackTrace();
        }
    }

public void onRefresh() {
        new GetDataTask().execute();
    }

    private class GetDataTask extends AsyncTask<Void, Void, List<Status>> {

        protected List<twitter4j.Status> doInBackground(Void... params) {
            paging.setPage(2);
            try {
                tweets = twitter.getHomeTimeline(paging);
            } catch (TwitterException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            return tweets;
        }

        protected void onPostExecute(List<twitter4j.Status> result) {
            tweetAdapter.notifyDataSetChanged();

            // Call onRefreshComplete when the list has been refreshed.
            pullToRefreshView.onRefreshComplete();

            super.onPostExecute(result);
        }
    }

私のTweetAdapter

public class TweetListAdapter extends ArrayAdapter<Status> {
    private final Context context;
    private final List<Status> values;

    public TweetListAdapter(Context context,int textViewResourceId, List<Status> tweets) {
        super(context, textViewResourceId, tweets);
        this.context = context;
        this.values = tweets;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        LayoutInflater inflater = (LayoutInflater) context
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        View rowView = inflater.inflate(R.layout.customtweetlist, parent, false);
        TextView textView = (TextView) rowView.findViewById(R.id.tvText);
        ImageView imageView = (ImageView) rowView.findViewById(R.id.ivImage);
        Status tweet = values.get(position);
        textView.setText(tweet.getText());

    //  imageView.setImageBitmap(getBitmap(tweet.getProfileImageUrl()));
        rowView.invalidate();

        return rowView;
    }

    public static Bitmap getBitmap(String bitmapUrl) {
        try {
            URL url = new URL(bitmapUrl);
            return BitmapFactory.decodeStream(url.openConnection() .getInputStream()); 
        }
        catch(Exception ex) {return null;}
    }
}
4

1 に答える 1

1

つまり、アダプターの値tweetsを更新する変数を更新しているということですが、そのリストは、アダプターがリストのレンダリングに使用しているものではありません(理由を知りたい場合は、ArrayAdapterコードを調べてください)。問題を修正する(そしてそれ以上の混乱を防ぐ)最も簡単な方法は、BaseAdapterから拡張することです。それはあなたにとってもう少し手間がかかりますが、あなたはアダプターが何をするかを完全に制御することができます(そして何がより良く起こっているかを理解するでしょう)。this.values

コードをさらにクリーンアップするには、の値を更新するメソッドをアダプターに追加する必要があります。this.valuesと同じリストを参照することに依存しないでくださいtweets

于 2012-05-10T15:44:45.083 に答える