代码之家  ›  专栏  ›  技术社区  ›  Tima

notifyDataSetChanged示例

  •  153
  • Tima  · 技术社区  · 14 年前

    我试着用在我的生活中 Android Application notifyDataSetChanged() 方法 ArrayAdapter 但这对我没用。

    我发现 as answer here ,那个 notifyDataSetChanged() 应该在主线程中运行,但是没有这样的示例。

    有人能发一个例子或者至少一个链接吗?!

    5 回复  |  直到 8 年前
        1
  •  332
  •   Sufian    11 年前

    对于一个 ArrayAdapter , notifyDataSetChanged 只有使用 add() , insert() , remove() ,和 clear()

    定制 它为 List 那是传进来的。如果你要通过 列表 定制 仍然保留着对原文的引用 列表 . 适配器不知道您更改了 在活动中。

    1. 使用 定制 添加() , 插入() , , 清除() 等)
    2. 重新创建 定制 用新的 数据。(使用大量资源和垃圾收集。)
    3. 创建自己的派生自 BaseAdapter ListAdapter 这样就可以改变 列表 数据结构。
    4. 使用 notifyDataSetChanged() runOnUiThread() 属于 Activity . notifyDataSetChanged() 会有用的。
        2
  •  34
  •   Dev-iL    8 年前

    你可以用 runOnUiThread() ListActivity ArrayAdapter .

    final ArrayAdapter adapter = ((ArrayAdapter)getListAdapter());
    runOnUiThread(new Runnable() {
        public void run() {
            adapter.notifyDataSetChanged();
        }
    });
    
        3
  •  12
  •   Arif Nadeem    11 年前

    我最近写了一篇关于这个话题的文章,虽然这篇文章很旧,但我认为它对那些想知道如何实现的人会有所帮助 BaseAdapter.notifyDataSetChanged() 一步一步地以正确的方式。

    How to correctly implement BaseAdapter.notifyDataSetChanged() in Android the newer blog BaseAdapter.notifyDataSetChanged() .

        4
  •  7
  •   casperOne    13 年前

    将此添加到您通常(尝试)调用notify的位置

    new AdapterHelper().update((ArrayAdapter)adapter, new ArrayList<Object>(yourArrayList));
    adapter.notifyDataSetChanged();
    

    AdapterHelper类

    public class AdapterHelper {
        @SuppressWarnings({ "rawtypes", "unchecked" })
        public void update(ArrayAdapter arrayAdapter, ArrayList<Object> listOfObject){
            arrayAdapter.clear();
            for (Object object : listOfObject){
                arrayAdapter.add(object);
            }
        }
    }
    
        5
  •  3
  •   Dev-iL    8 年前

    我知道这是一个迟来的反应,但我面临着一个类似的问题,我设法解决它使用 notifyDataSetChanged() 在正确的地方。

    我必须用一个完全不同的活动返回的内容更新操作栏选项卡(片段)中的listview。不过,listview最初不会反映任何更改。但是,当我单击另一个选项卡,然后返回到所需的选项卡时,listview将使用其他活动中的正确内容进行更新。所以为了解决这个问题我用了 notifyDataSetChanged()

    这是我在活动中使用的代码片段。

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
    
        switch (item.getItemId()) 
        {
            case R.id.action_new_forward:
    
                FragmentTab2.mListAdapter.notifyDataSetChanged();//this updates the adapter in my action bar tab
                Intent ina = new Intent(getApplicationContext(), MainActivity.class);
                ina.putExtra("stra", values1);
                startActivity(ina);// This is the code to start the parent activity of my action bar tab(fragment).
        }
    }
    

    FragmentTab2 它会直接更新我的listview 碎片表2 .

    希望有人觉得这个有用!

    推荐文章