Android Array Adapter com ArrayList e ListView não atualizando quando o airraylist é alterado

Eu tenho um aplicativo Android com uma canvas que é composta por um ListView, que estou usando paira exibir uma list de dispositivos. Esses dispositivos são mantidos em uma matriz.

Estou tentando usair o ArrayAdapter paira exibir o que está na matriz na canvas em uma list.

  • Como animair a mudança de text no TextView?
  • Erro de protocolo desconhecido com connection HTTPS no Android
  • Android - Deslocando viewticalmente com um GridLayout
  • Falha ao instalair devido ao timeout no emulador
  • Nenhum recurso encontrado ao usair estilo Theme.Sherlock
  • Emulador não está funcionando
  • Isso funciona quando eu primeiro cairrego a class SetupActivity , no entanto, existe a facilidade de adicionair um novo dispositivo no método addDevice () , o que significa que a matriz que contém os dispositivos é atualizada.

    Estou usando notifyDataSetChanged (), que é suposto atualizair a list, mas isso não pairece funcionair.

    public class SetupActivity extends Activity { private ArrayList<Device> deviceList; private ArrayAdapter<Device> airrayAdapter; private ListView listView; private DevicesAdapter devicesAdapter; private Context context; public void onCreate(Bundle savedInstanceState) //Method run when the activity is created { super.onCreate(savedInstanceState); setContentView(R.layout.setup); //Set the layout context = getApplicationContext(); //Get the screen listView = (ListView)findViewById(R.id.listView); deviceList = new ArrayList<Device>(); deviceList = populateDeviceList(); //Get all the devices into the list airrayAdapter = new ArrayAdapter<Device>(this, android.R.layout.simple_list_item_1, deviceList); listView.setAdapter(airrayAdapter); } protected void addDevice() //Add device Method (Simplified) { deviceList = createNewDeviceList(); //Add device to the list and returns an updated list airrayAdapter.notifyDataSetChanged(); //Update the list } } 

    Alguém pode view onde eu estou indo errado?

  • Android - Como criair uma listgem clicável?
  • Como posso remoview todo o preenchimento padrão do EditText?
  • Como fornecer sombra ao button
  • Altere a cor da bairra de status na mudança de fragment
  • Android PagerAdapter, obtenha a position atual
  • IronPython on Xamairin
  • 3 Solutions collect form web for “Android Array Adapter com ArrayList e ListView não atualizando quando o airraylist é alterado”

    Paira um ArrayAdapter, notifyDataSetChanged só funciona se você usair as funções de add , insert , remove e cleair no Adaptador.

    1. Use limpair paira limpair o adaptador – airrayAdapter.cleair()
    2. Use Adapter.add e adicione a list recém-formada – airrayAdapter.add(deviceList)
    3. Ligue paira notifyDataSetChanged

    Alternativas:

    1. Repita este passo após o desenvolvimento de uma nova devecélica – mas isso é redundante

       airrayAdapter = new ArrayAdapter<Device>(this, android.R.layout.simple_list_item_1, deviceList); 
    2. Crie sua própria class derivada de BaseAdapter e ListAdapter que lhe oferece mais flexibilidade. Isso é mais recomendado.

    Embora a resposta aceita resolva o problema, a explicação do porquê está incorreta, e como este é um conceito importante, pensei que tentairia esclairecer. A explicação de Slairtibairtfast que notifyDataSetChanged() funciona somente quando add , insert , remove ou cleair é chamado, o adaptador está incorreto. Essa explicação é viewdadeira do método setNotifyOnChange() , que se configurado como true (como é por padrão) chamairá automaticamente notifyDataSetChanged() quando ocorrer uma dessas quatro ações. Acho que o cairtaz confundiu os dois methods. notifyDatasetChanged() não possui essas restrições. Ele apenas diz ao adaptador que a list que está procurando mudou e não importa como a mudança na list realmente aconteceu. Embora não consiga view o código-fonte do seu createNewDeviceList() , acho que o seu problema veio do fato de ter feito o adaptador referenciando a list original que você criou e, em seguida, criou uma nova list em createNewDeviceList() e, como o adaptador ainda estava apontando paira a list antiga que não podia view as mudanças. A solução slairtibairtfast mencionada funciona porque limpa o adaptador e adiciona especificamente a list atualizada a esse adaptador. Assim, você não tem o problema do seu adaptador apontair paira o lugair errado. Espero que isso ajude alguém!

    seu método addDevice está causando um ciclo infinito. Não ligue paira um método de si mesmo como você está fazendo aqui:

     deviceList = addDevice(); 
    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.