Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/223.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Android:在自定义ArrayAdapter中使用相同的资源ID?_Java_Android_Listview_Android Arrayadapter_Android Resources - Fatal编程技术网

Java Android:在自定义ArrayAdapter中使用相同的资源ID?

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

我在我的ListView中创建一个自定义数组适配器,我注意到分配给我的
itemListView中每个
englishWordTextView
的资源ID
R.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:-DRICK
ListView
现在开始使用
RecyclerView
。以下是for
RecyclerView

列表视图是一组视图,必须使用。看起来您的思路是正确的,但您可能不了解此模式的所有组件。应该没有理由从适配器外部引用TextView。这里的
getView()
方法负责扩展ListView中的行布局。这是设置文本和行的任何其他可见元素的位置

getItem()
方法(我看到您正在调用该方法,但尚未包含声明)是您可以访问项目数据的地方(请考虑模型)

下面是一个可能使这更容易理解的示例