ArrayAdapter 未在 ListView、Android Studio 中显示添加的元素

Posted

技术标签:

【中文标题】ArrayAdapter 未在 ListView、Android Studio 中显示添加的元素【英文标题】:ArrayAdapter not showing added elements in ListView, Android Studio 【发布时间】:2021-08-16 19:10:45 【问题描述】:

我最近在我的应用程序的菜单中添加了一个 SearchView 元素,它可以正确过滤我的 ListView 中的元素。问题出现在我搜索某些内容之后,事实上,如果我尝试向我的 ListView 添加一个元素,它不会显示该元素。 添加的元素实际上进入了我的代码中的 ArrayList 内部,我通过调试工具检查了它。有什么想法吗?

这是我的 SearchView 的 OnQueryTextListener:

 searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() 
        @Override
        public boolean onQueryTextSubmit(String s)  
            return false;
        

        @Override
        public boolean onQueryTextChange(String s)  
            adapter.getFilter().filter(s);
            return true;
        
    );

我认为问题在于 ArrayAdapter。如果您需要更多详细信息,我可以在这里发布。

编辑#1

阵列适配器:

    adapter = new ArrayAdapter<Contatto>(this, android.R.layout.simple_list_item_1, r.arr);
    rubrica.setAdapter(adapter);

添加元素方法:

    public void Aggiungi(View view)

    String n,c,t;

    n = editNome.getText().toString();

    c = editCognome.getText().toString();

    t = editNumero.getText().toString();

    if(!PhoneNumberUtils.isGlobalPhoneNumber("+39" +  t) || (t.length() < 8) )
        Toast.makeText(this, "Inserisci un numero internazionale valido.", Toast.LENGTH_SHORT).show();
        return;
    

    r.aggiungiContatto(n , c , t); //C'è qualcosa che non va nel filtrare i tutto.
    adapter.notifyDataSetChanged();

r 是包含 ArrayList 的对象。 “aggiungiContatto”方法是:

public void aggiungiContatto(String nome, String cognome, String numeroCell)
    Contatto c=new Contatto(nome, cognome, numeroCell);
    arr.add(c);

应该够了。

【问题讨论】:

你能分享你的适配器代码和你添加新项目到 ListView 的部分 @ShobhithYadav 当然。 尝试将arr.add(c);更改为adapter.add(c); @i_A_mok 刚刚尝试过,这样做的元素甚至没有进入 ArrayList。 过滤了ArrayAdapter后,你有没有尝试使用adapter.notifyDataSetChanged()通知变化 【参考方案1】:

以下可能是一种解决方法,请尝试:

        @Override
        public boolean onQueryTextChange(String s) 
            adapter.getFilter().filter(s);
            if (s.equals("")) 
                adapter = new ArrayAdapter(getApplicationContext(), android.R.layout.simple_expandable_list_item_1, r.arr);
                rubrica.setAdapter(adapter);
            
            return true;
        

【讨论】:

以上是关于ArrayAdapter 未在 ListView、Android Studio 中显示添加的元素的主要内容,如果未能解决你的问题,请参考以下文章

onItemClickListener 未在自定义 ArrayAdapter 上触发

android笔记:ListView及ArrayAdapter

ListView:setItemChecked 仅适用于标准 ArrayAdapter - 在使用自定义 ArrayAdapter 时不起作用?

android中的ArrayAdapter创建简单的listview

OnItemClickListener 为 ListView 使用 ArrayAdapter

搜索在 ArrayAdapter 和 ListView 中不起作用