我创建了一个名为Categoria的类,它有两个属性(String nombre,int id)。
我创建了一个ArrayList,其元素类型为Categoria。
当我在ListView上显示ArrayList时,我得到了这个:
而不是这个,我希望显示属性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" />
谢谢:)
答案 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)
答案 2 :(得分:1)
默认情况下,ArrayAdapter将显示对象的toString
方法返回的文本。在这种简单的情况下,您只需覆盖toString
的{{1}}方法并返回Categoria
字段:
nombre
如果您的应用程序需要更改并且您需要更复杂的布局,则可以覆盖public class Categoria {
...
@Override
public String toString() {
return this.nombre;
}
}
getView
方法将ArrayAdapter
的数据绑定到更复杂的视图。