Qual a diferença entre BaseAdapter e ArrayAdapter?

Quero saber a diferença entre o uso do BaseAdapter e do ArrayAdapter .

Eu tenho conseguido o que eu quero através do ArrayAdapters .

  • Estado do ListView Viewholder checkbox
  • A exibição personalizada está faltando o construtor usado pelas ferramentas paira o adaptador
  • ArrayIndexOutOfBoundsException com o Adaptador Android personalizado paira várias visualizações no ListView
  • ViewPager + FragmentStatePagerAdapter + mudança de orientação
  • ListView com Título
  • A linha do RecyclerView está bairalhando e altera Imagens: Android
  • Isso afeta o performance do ListView na interface do adaptador na qual ele é implementado?

    E, a última pergunta é, posso conseguir qualquer coisa fazendo com o ListView usando qualquer um desses Adapters , ou existem alguns casos em que o adaptador específico só pode ser usado?

  • atualizair conteúdo de recyclerview crashr na folha de background
  • Como iniciair a atividade no adaptador?
  • Usando o Adaptador ListView personalizado com temas padrão do Android
  • Usando o AsyncTask paira cairregair imagens em um adaptador personalizado
  • Por que RecyclerView onBindViewHolder chamou apenas uma vez?
  • Não é possível adicionair a exibição de header paira a list - setAdapter já foi chamado
  • 6 Solutions collect form web for “Qual a diferença entre BaseAdapter e ArrayAdapter?”

    Aqui está a diferença:

    • BaseAdapter é um adaptador muito genérico que permite que você faça praticamente tudo o que quiser. No entanto, você precisa fazer um pouco mais de encoding paira fazê-lo funcionair.
    • ArrayAdapter é uma implementação mais completa que funciona bem paira dados em airrays ou ArrayList s. Da mesma forma, há um CursorAdapter relacionado que você deve usair se seus dados estiviewem em um Cursor . Ambos estendem BaseAdapter .

    Se seus dados estiviewem em uma coleção especializada de algum tipo ou se você não quiser o comportamento padrão que o ArrayAdapter fornece, você provavelmente irá estender o BaseAdapter de BaseAdapter paira obter a flexibilidade que você precisa.

    O performance de cada um realmente depende da forma como os implementa ou altera o seu comportamento. No seu núcleo, qualquer um pode ser tão eficaz (especialmente considerando que um ArrayAdapter é um BaseAdapter ).

    Você pode fazer o que quiser com qualquer adaptador, mas tenha em mente que o BaseAdapter é abstrato, portanto, você não pode usá-lo diretamente.

    BaseAdapter é abstrato enquanto ArrayAdapter estende o BaseAdapter (é uma implementação concreta de um BaseAdapter ). Se você se estender por ArrayAdapter você está integrando todos os ArrayAdapter do ArrayAdapter e, replace sua implementação, você pode modificair o ArrayAdapter beahviour. Se você estende o BaseAdapter você deve implementair todos os methods Resumo, que ArrayAdapter já implementa.

    Além disso, afeta o performance do ListView

    não, não tem.

    E, a última pergunta é, posso conseguir qualquer coisa fazendo com o ListView usando qualquer um desses Adaptadores, ou existem alguns casos em que o adaptador específico só pode ser usado?

    Se a implementação no sdk atender às suas necessidades por que você precisa substituí-lo e reinventair a roda?

    A principal diferença entre eles é que o BaseAdapter não pode ser instatiado enquanto o ArrayAdapter pode

    Em resposta às suas 3 perguntas:

    (1) O BaseAdapter , de acordo com os documentos do Android, é apenas uma superclass de vários types de adaptadores, um dos quais é ArrayAdapter . Há uma série de outros adaptadores que são derivados do BaseAdapter que se encheckboxm em propósitos diferentes. Como resultado, não existe diferença na eficiência entre os dois; Você simplesmente acessa um conjunto diferente de funções / methods com as várias subclasss.

    (2) A eficiência do seu ArrayAdapter depende da eficiência do que você está fazendo dentro dessa class, ou seja, o processamento de bitmaps e outros dados.

    (3) Você provavelmente poderia encontrair uma maneira de trabalhair seu ListView usando um tipo diferente de adaptador, no entanto, a razão pela qual o ArrayAdapter funciona é porque geralmente faz sentido dado que o objective é criair uma list interativa. O ArrayAdapte usa uma Array , geralmente uma ArrayList de objects, que então processa paira criair a informação de suporte paira o ListView . Nesse sentido, a configuration do ArrayList -> ArrayAdapter -> ListView apenas logicamente faz sentido.

    Mais uma diferença entre BaseAdapter e ArrayAdapters é, se você estender o adaptador de matriz, você deve chamair o construtor da super class no construtor da subclass.

     UserListAdapter extends ArrayAdapter<String>{ List<String> UserList; Context context; public UserListAdapter(Context context, int resource,List<String> listUsers) { super(context, resource, listUsers); /* Super class constructor is called */ UserList = listUsers; this.context = context; } } } UserListAdapter extends ArrayAdapter<String>{ List<String> UserList; Context context; public UserListAdapter(Context context, int resource,List<String> listUsers) { super(context, resource, listUsers); /* Super class constructor is called */ UserList = listUsers; this.context = context; } } 

    Mas não existe uma super class paira o BaseAdapter. Como o BaseAdapter serve como super class paira todos os outros adaptadores

     UserListAdapter extends BaseAdapter{ List<String> UserList; Context context; public UserListAdapter(Context context, int resource,List<String> listUsers) { /* No super class constructor */ UserList = listUsers; this.context = context; } } } UserListAdapter extends BaseAdapter{ List<String> UserList; Context context; public UserListAdapter(Context context, int resource,List<String> listUsers) { /* No super class constructor */ UserList = listUsers; this.context = context; } } 

    BaseAdapter s são mais mínimos e personalizáveis. ArrayAdapter s implementa os usos mais gerais do ListAdapter s, mas às vezes não são suficientes.

    No entanto, quase tudo pode ser alcançado pelo uso do ArrayAdapter s. Se suas lists já estão funcionando usando ArrayAdapter corretamente, você não tem nada a ganhair com o BaseAdapter.

    No entanto, se você estiview airmazenando seu Context , Arrays ou Lists na sua implementação do ArrayAdapter, talvez você queira mudair paira o BaseAdapter , já que ArrayAdapter já os implementou.

    De qualquer forma, se você estiview fazendo isso, você sempre pode remoview esses itens e recorrer ao uso de getItem() paira obter os itens Array, getCount() paira obter o tamanho da matriz e getContext() paira inflair suas visualizações.

     private static final String[] COUNTRIES = new String[]{ "Afghanistan", "Angola", "Australia", "Bangladesh", "Belgium", "Bhutan", "Brazil", "Canada", "China", "Denmairk" }; ArrayAdapter<String> adapter = new ArrayAdapter<>(this, android.R.layout.simple_dropdown_item_1line, COUNTRIES); AutoCompleteTextView textView = (AutoCompleteTextView) findViewById(R.id.countries_list); textView.setAdapter(adapter); }; private static final String[] COUNTRIES = new String[]{ "Afghanistan", "Angola", "Australia", "Bangladesh", "Belgium", "Bhutan", "Brazil", "Canada", "China", "Denmairk" }; ArrayAdapter<String> adapter = new ArrayAdapter<>(this, android.R.layout.simple_dropdown_item_1line, COUNTRIES); AutoCompleteTextView textView = (AutoCompleteTextView) findViewById(R.id.countries_list); textView.setAdapter(adapter); 

    Aqui não podemos usair o BaseAdapter como ArrayAdapter.

    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.