自定义数组适配器
Customed ArrayAdapter
我创建了一个名为 Categoria 的 class,它有两个属性(String nombre,int id)。
我创建了一个包含 Categoria 类型元素的 ArrayList。
当我在 ListView 上显示 ArrayList 时,我得到:
而不是这个,我想要显示属性 nombre,它是一个字符串。
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" />
谢谢:)
最简单的方法是只将 ArrayList 传递给适配器。
如果您想将 Categoria 对象传递给您的适配器,您必须为其编写您自己的自定义适配器。
link 包含有关该场景的很好示例。
adaptador = new ArrayAdapter<Categoria>(this, android.R.layout
.simple_list_item_1, lista);
在这里,您将 ArrayList (lista) 传递给适配器。然后适配器将只调用 ArrayList 中每个对象的 toString() 方法。
因此您可以将 Categoria class 中的 toString() 方法覆盖为 return nombre 属性。
@Override
public String toString(){
return this.nombre;
}
您还可以创建一个 ArrayList<String>
而不是 ArrayList<Categoria>
,并且只添加 nombre 属性(而不是整个 Categoria 对象)。
另一种选择是创建您自己的 ArrayAdapter 并自定义 getView() 方法中显示的内容。
看看this问题
默认情况下,ArrayAdapter 将显示由对象的 toString
方法编辑的文本 return。在这种简单的情况下,您可以简单地为 Categoria
和 return 覆盖 nombre
字段的 toString
方法:
public class Categoria {
...
@Override
public String toString() {
return this.nombre;
}
}
如果您的应用程序需要更改并且您需要更复杂的布局,您可以覆盖 ArrayAdapter
的 getView
方法以将数据从 Categoria
绑定到更复杂的视图。
我创建了一个名为 Categoria 的 class,它有两个属性(String nombre,int id)。
我创建了一个包含 Categoria 类型元素的 ArrayList。
当我在 ListView 上显示 ArrayList 时,我得到:
而不是这个,我想要显示属性 nombre,它是一个字符串。 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" />
谢谢:)
最简单的方法是只将 ArrayList 传递给适配器。
如果您想将 Categoria 对象传递给您的适配器,您必须为其编写您自己的自定义适配器。
link 包含有关该场景的很好示例。
adaptador = new ArrayAdapter<Categoria>(this, android.R.layout
.simple_list_item_1, lista);
在这里,您将 ArrayList (lista) 传递给适配器。然后适配器将只调用 ArrayList 中每个对象的 toString() 方法。
因此您可以将 Categoria class 中的 toString() 方法覆盖为 return nombre 属性。
@Override
public String toString(){
return this.nombre;
}
您还可以创建一个 ArrayList<String>
而不是 ArrayList<Categoria>
,并且只添加 nombre 属性(而不是整个 Categoria 对象)。
另一种选择是创建您自己的 ArrayAdapter 并自定义 getView() 方法中显示的内容。
看看this问题
默认情况下,ArrayAdapter 将显示由对象的 toString
方法编辑的文本 return。在这种简单的情况下,您可以简单地为 Categoria
和 return 覆盖 nombre
字段的 toString
方法:
public class Categoria {
...
@Override
public String toString() {
return this.nombre;
}
}
如果您的应用程序需要更改并且您需要更复杂的布局,您可以覆盖 ArrayAdapter
的 getView
方法以将数据从 Categoria
绑定到更复杂的视图。