0

結果を a で表示するためにCustomAdapterwhich extendsBaseAdapterとを使用しています。すべて正常に動作しますが、10 分ごとに新しい項目で listView を更新したいので、. 問題は、古いアイテムを削除するのではなく、古いアイテムに新しいアイテムを追加することです。インターネットで見つけたすべてのものを使用していますが、何も起こりません。これは私の試みのコードです:AsynccTaskListViewAsyncTaskTimeTasklistviewnotifyDataSetChanged()

public class Twitter7FeedActivity extends Activity {

    LazyAdapter adapter;
    ListView list;

    JSONObject jsonObj = null;
    JSONArray jsonArray = null;
    ArrayList<HashMap<String, String>> tweets = new ArrayList<HashMap<String, String>>();
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.layout_twitter7_feed);
        callAsynchronousTask();
    }

    public void callAsynchronousTask() {
        final Handler handler = new Handler();
        Timer timer = new Timer();
        TimerTask doAsynchronousTask = new TimerTask() {
            @Override
            public void run() {
                handler.post(new Runnable() {
                    public void run() {
                        try {
                            new GetFeedTask().execute(CommonUtils.BEARER_TOKEN,
                                    CommonUtils.URL);
                        } catch (Exception e) {
                        }
                    }
                });
            }
        };
        timer.schedule(doAsynchronousTask, 0, 30000);
    }

    protected class GetFeedTask extends AsyncTask<String, Void, String> {


        @Override
        protected String doInBackground(String... params) {
               //related code
        }

        @Override
        protected void onPostExecute(String jsonText) {

            // My Json parsing related code

            list = (ListView) findViewById(R.id.list);
            adapter = new LazyAdapter(Twitter7FeedActivity.this, tweets);
            list.setAdapter(adapter);
            //adapter.notifyDataSetChanged();
            ((LazyAdapter) list.getAdapter()).notifyDataSetChanged();
        }
    }
}

そして、これは私の LazyAdapter クラスです:

public class LazyAdapter extends BaseAdapter {

    private Activity activity;
    private ArrayList<HashMap<String, String>> data;
    private static LayoutInflater inflater = null;
    public ImageLoader imageLoader;

    public LazyAdapter(Activity a, ArrayList<HashMap<String, String>> d) {
        activity = a;
        data = d;
        notifyDataSetChanged(); // I am also using it here
        inflater = (LayoutInflater) activity
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        imageLoader = new ImageLoader(activity.getApplicationContext());
    }

    public View getView(int position, View convertView, ViewGroup parent) {
        View vi = convertView;
        if (convertView == null)
            vi = inflater.inflate(R.layout.list_row, null);
        TextView name = (TextView) vi.findViewById(R.id.name);
        TextView tweet = (TextView) vi.findViewById(R.id.text);
        TextView date = (TextView) vi.findViewById(R.id.created_at);

        //related code

        return vi;
    }
}

AsyncTask を再度実行すると、リストビューは最後に新しいアイテムを追加しますが、リストビューを新しいアイテムだけで完全に更新する必要があります。

4

2 に答える 2

2

新しい項目を ListView に配置する前に、まず ListView 内に既にある項目をクリアする必要があります。

例えば:

    clearButton.setOnClickListener(new OnClickListener()
    {

        public void onClick(View arg0)
        {
            adapter.clear();
            adapter.notifyDataSetChanged();
        }
    });
}
于 2013-07-25T13:50:09.797 に答える
1

評判が少ないため、コメントで回答することができます。

adapter.notifyDataSetChanged();バックグラウンド タスクまたはデータの更新を完了したときに使用 します。

于 2013-07-25T13:56:28.060 に答える