Customed ArrayAdapter

时间:2016-10-29 19:02:01

标签: android listview android-arrayadapter

我创建了一个名为Categoria的类,它有两个属性(String nombre,int id)。

我创建了一个ArrayList,其元素类型为Categoria。

当我在ListView上显示ArrayList时,我得到了这个:

enter image description here

而不是这个,我希望显示属性nombre,即String。 ArrayAdapter必须是Categoria类型,而不是String。

我该怎么做?也许创建一个定制的适配器?

以下是一段代码:

public class MainActivity extends AppCompatActivity {

private ArrayList<Categoria> lista;
private ArrayAdapter<Categoria> adaptador;
private ListView view_lista;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    adaptador = new ArrayAdapter<Categoria>(this, android.R.layout
            .simple_list_item_1, lista);
    view_lista = (ListView)findViewById(R.id.view_lista);
    view_lista.setAdapter(adaptador);

这是simple_list_item_1布局:

<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@android:id/text1"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:textAppearance="?android:attr/textAppearanceListItemSmall"
    android:gravity="center_vertical"
    android:paddingStart="?android:attr/listPreferredItemPaddingStart"
    android:paddingEnd="?android:attr/listPreferredItemPaddingEnd"
    android:minHeight="?android:attr/listPreferredItemHeightSmall" />

谢谢:)

3 个答案:

答案 0 :(得分:2)

adaptador = new ArrayAdapter<Categoria>(this, android.R.layout
            .simple_list_item_1, lista);

这里将ArrayList(lista)传递给适配器。然后,适配器将调用ArrayList中每个Object的toString()方法。

因此,您可以覆盖Categoria类中的toString()方法以返回nombre属性。

@Override
public String toString(){
   return this.nombre;
}

您还可以创建ArrayList<String>而不是ArrayList<Categoria>,只添加nombre属性(而不是整个Categoria对象)。 另一个选择是创建自己的ArrayAdapter并自定义getView()方法中显示的内容。

查看this问题

答案 1 :(得分:1)

最简单的方法是只将ArrayList传递给适配器。

如果要将Categoria对象传递给适配器,则必须为其编写自己的自定义适配器。

link包含有关该场景的非常好的示例。

答案 2 :(得分:1)

默认情况下,ArrayAdapter将显示对象的toString方法返回的文本。在这种简单的情况下,您只需覆盖toString的{​​{1}}方法并返回Categoria字段:

nombre

如果您的应用程序需要更改并且您需要更复杂的布局,则可以覆盖public class Categoria { ... @Override public String toString() { return this.nombre; } } getView方法将ArrayAdapter的数据绑定到更复杂的视图。