Java Android:在自定义ArrayAdapter中使用相同的资源ID?
我在我的ListView中创建一个自定义数组适配器,我注意到分配给我的Java Android:在自定义ArrayAdapter中使用相同的资源ID?,java,android,listview,android-arrayadapter,android-resources,Java,Android,Listview,Android Arrayadapter,Android Resources,我在我的ListView中创建一个自定义数组适配器,我注意到分配给我的itemListView中每个englishWordTextView的资源IDR.ID.txt\u item\u eng似乎是相同的?如果我在ListView中有一个视图列表,那么它们的ID是否应该有所不同?我只是想用一个新的英语单词来更新每个项目 public class WordAdapter extends ArrayAdapter<Word> { public WordAdapter(Contex
itemListView中每个englishWordTextView
的资源IDR.ID.txt\u item\u eng
似乎是相同的?如果我在ListView中有一个视图列表,那么它们的ID是否应该有所不同?我只是想用一个新的英语单词来更新每个项目
public class WordAdapter extends ArrayAdapter<Word> {
public WordAdapter(Context context, List objects) {
super(context, 0, objects);
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View itemListView = convertView; //Recycle old view
....
// Word is a custom class
Word w = getItem(position); It's specified in `extends ArrayAdapter<Word>`
// Update English word
TextView englishWordTextView = (TextView) itemListView.findViewById(R.id.txt_item_eng);
englishWordTextView.setText(w.getEnglishWord());
return itemListView;
}
}
公共类WordAdapter扩展了ArrayAdapter{
公共WordAdapter(上下文、列表对象){
超级(上下文,0,对象);
}
@凌驾
公共视图getView(int位置、视图转换视图、视图组父视图){
View itemListView=convertView;//回收旧视图
....
//Word是一个自定义类
Word w=getItem(position);它在“extends ArrayAdapter”中指定`
//更新英文单词
TextView englishWordTextView=(TextView)itemListView.findViewById(R.id.txt\u item\u eng);
setText(w.getEnglishWord());
返回itemListView;
}
}
我猜这里的另一个问题是,如果每个单词TextView
的ID都是R.ID.txt\u item\u eng
,我如何在itemListView
之外引用它们?这就是ListView
或任何AdapterView
的工作方式。相同的视图将为每个项目充气。每个在android中有适配器实现的小部件都有自己的方式来访问特定位置的项目
例如,如果您想点击每个位置,可以设置AdapterView.OnItemClickListener
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int position, long l) {
// position is the item clicked
}
});
listView.setOnItemClickListener(新的AdapterView.OnItemClickListener(){
@凌驾
公共虚线单击(AdapterView AdapterView,视图视图,内部位置,长l){
//单击项目的位置
}
});
此外,每个ListAdapter
类都有访问项目的方法,如getItem(position)
,您可以从中返回数据集中特定位置的对象
根据我的理解,您应该首先了解ListView
和ViewHolder
模式。
你可以读一本或类似的书。如果您不理解ListView
背后的概念,那么这个答案可能太大了。因此,最好您查看一些示例和文档
p.S:-DRICKListView
现在开始使用RecyclerView
。以下是forRecyclerView
列表视图是一组视图,必须使用。看起来您的思路是正确的,但您可能不了解此模式的所有组件。应该没有理由从适配器外部引用TextView。这里的getView()
方法负责扩展ListView中的行布局。这是设置文本和行的任何其他可见元素的位置
getItem()
方法(我看到您正在调用该方法,但尚未包含声明)是您可以访问项目数据的地方(请考虑模型)
下面是一个可能使这更容易理解的示例