我刚开始使用Big Nerd Ranch Guide学习android。在一个项目中,我们实现了一个listView并使用ArrayAdapter从数组中获取数据,因为犯罪对象存储在一些列表中。
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getActivity().setTitle(R.string.crimes_title);
mCrimes = CrimeLab.get(getActivity()).getCrimes();
ArrayAdapter<Crime> adapter =
new ArrayAdapter<Crime>(getActivity(),
android.R.layout.simple_list_item_1,
mCrimes);
setListAdapter(adapter);
}
之后,我们创建自定义列表以显示标题以及复选框和日期,以便我们创建自定义布局。现在,我们为此目的使用了不同的适配器。
private class CrimeAdapter extends ArrayAdapter<Crime> {
public CrimeAdapter(ArrayList<Crime> crimes) {
super(getActivity(), 0, crimes);
}
我的问题是为什么我们不能使用我们之前使用的相同适配器?我的意思是我们可以给它新值或创建一个新对象。我搜索了互联网,发现我们可以创建multiple adapters with some restrictions。 为什么我们将它扩展到ArrayAdapter?我们不能像以前那样通过创建适配器来实现它? 请详细解释,我刚刚开始。
感谢。
答案 0 :(得分:1)
让我们先谈谈android中的列表视图适配器实现,在你的第一个例子中,你使用android中的listview适配器的默认实现,为你提供文本的列表视图
但是大部分时间这对你的用户界面来说还不够,你想在你的第二个例子中添加一个复选框,所以android OS让你能够制作你自己的自定义单元格(列表中的每一行)这就是为什么你会发现自己需要扩展数组适配器
在你使用的第一个例子中
android.R.layout.simple_list_item_1
这是一个仅包含textview的布局
并提供数据源mCrimes
因此,当您扩展数组适配器时,您也可以使用自己的布局来表示单元格和将填充列表的数据源
希望为您澄清并欢迎乘坐:)