讲解setOnItemClickListener中处理对象的逻辑
Explain the logic of dealing with objects in setOnItemClickListener
看下面的代码:
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
word word = words.get(position);
mMediaPlayer = MediaPlayer.create(FamilyActivity.this, word.getAudioResourceId());
mMediaPlayer.start();
//*************Releasing resources
mMediaPlayer.setOnCompletionListener(mCompletionListener);
}
});
}
它属于一个列表视图。
单击该 ListView 中的一行时,此方法会拦截单击并播放该项目的相应歌曲。
在第四行你会看到这段代码:word word = words.get(position);
- 什么是"position"?
- 什么是“.get()”方法?
- 我们可以将它们保存在一个单词对象中吗?
请解释一下这行代码好吗?
PS:有关更多详细信息,我将向您展示 "word" class 以及 "words" ArrayList,以防您需要查看它:
public class word {
//////Atributes
private String mDefaultTranslation;
private String mMiwokTranslation;
private int mImageResourceId=NO_IMAGE_PROVIDED;
private static final int NO_IMAGE_PROVIDED=-1;
private int mAudioResourceId;
//Constructor
public word(String defaultTranslation,String miwokTranslation,int audioResourceId){
mDefaultTranslation=defaultTranslation;
mMiwokTranslation=miwokTranslation;
mAudioResourceId=audioResourceId;
}
public word(String defaultTranslation,String miwokTranslation,int ImageResourceId,int audioResourceId){
mDefaultTranslation=defaultTranslation;
mMiwokTranslation=miwokTranslation;
mImageResourceId=ImageResourceId;
mAudioResourceId=audioResourceId;
}
//Getters
public String getDefaultTranslation(){
return mDefaultTranslation;
}
public String getMiwokTranslation(){
return mMiwokTranslation;
}
public int getImageResourceId(){return mImageResourceId;}
public boolean hasImage(){return mImageResourceId != NO_IMAGE_PROVIDED;}
public int getAudioResourceId(){return mAudioResourceId;}
这是 "words" arraylist:
final ArrayList<word> words = new ArrayList<word>();
words.add(new word("father", "әpә", R.drawable.family_father, R.raw.family_father));
words.add(new word("mother", "әṭa", R.drawable.family_mother, R.raw.family_mother));
words.add(new word("son", "angsi", R.drawable.family_son, R.raw.family_son));
words.add(new word("daughter", "tune", R.drawable.family_daughter, R.raw.family_daughter));
words.add(new word("older brother", "taachi", R.drawable.family_older_brother, R.raw.family_older_brother));
words.add(new word("younger brother", "chalitti", R.drawable.family_younger_brother, R.raw.family_younger_brother));
words.add(new word("older sister", "teṭe", R.drawable.family_younger_sister, R.raw.family_older_sister));
words.add(new word("ounger sister", "kolliti", R.drawable.family_younger_sister, R.raw.family_younger_sister));
words.add(new word("grandmother", "ama", R.drawable.family_grandmother, R.raw.family_grandmother));
words.add(new word("grandfather", "paapa", R.drawable.family_grandfather, R.raw.family_grandfather));
"Position"是列表项被点击的位置。就像您单击 "mother" 项目...位置将为 1,它从 0 开始。
.get(position) 是ArrayList 的方法.. 其中returns arraylist 的特定项取决于position.
是的,你可以这样保存word对象。
words是ArrayList,与ListView关联,所以调用onItemClicked时,取ListView中item的position。所以,如果你想获取特定对象,它与 position 上的 ListView 项相关联,你可以调用 ArrayList 的 get() 方法。您现在有 word 对象,它与 position 位置的列表项相关联。
Position 是您单击的项目在适配器中的视图数组中的索引。 get() 方法只是 returns 从数组中查看。
您可以引用部分视图并将它们的值保存为字符串、对象等。
What is "position"?
间接回答 - 想想点击监听器的目的。你在点击什么 - 一个项目。它需要知道您单击了 哪个 项目。因此,position
And what is ".get()" method?
这似乎是你自己回答的。 words
是一个数组列表。你如何 "get" Arraylist 中的项目?
无论哪种情况,JavaDoc 都可以回答这两个问题
can we save them in a word object?
什么是"them"?您 正在 获取 word
对象的实例,但是变量名称也恰好是 word
。
保存位置?我不建议这样做。当同一个对象可以在另一个列表中的某个不同位置时,将单词的位置存储在一个列表中有什么好处?
word
是引用类型。 ArrayList 单词包含对几个单词对象的引用。
words.get(position)
returns 对 ArrayList 中该索引处的单词对象的引用,从 0 开始。
word word = words.get(position)
引用 ArrayList words
中位置的单词并将其分配给 word
,因此 word
现在 'points' 到 ArrayList 中的对象.
在这行代码中:
word word = words.get(position);
"position"指的是列表中被点击的位置。你可以看到它作为一个int参数传递给了函数:
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
这里的 get() 方法很可能是 Java 的 List get 方法,returns 列表中给定索引处的项目:
Java List javadoc
把它们放在一起,这一行就是说 "give me the 'word' object from the ArrayList 'words' that was clicked on, based on the int 'position' "
注意:另一个编码注释,通常的做法是用 "Word" 的开头大写字母命名 classes 而不是 "word"。这将避免混淆什么是 class 和什么是变量。
看下面的代码:
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
word word = words.get(position);
mMediaPlayer = MediaPlayer.create(FamilyActivity.this, word.getAudioResourceId());
mMediaPlayer.start();
//*************Releasing resources
mMediaPlayer.setOnCompletionListener(mCompletionListener);
}
});
}
它属于一个列表视图。
单击该 ListView 中的一行时,此方法会拦截单击并播放该项目的相应歌曲。
在第四行你会看到这段代码:word word = words.get(position);
- 什么是"position"?
- 什么是“.get()”方法?
- 我们可以将它们保存在一个单词对象中吗?
请解释一下这行代码好吗?
PS:有关更多详细信息,我将向您展示 "word" class 以及 "words" ArrayList,以防您需要查看它:
public class word {
//////Atributes
private String mDefaultTranslation;
private String mMiwokTranslation;
private int mImageResourceId=NO_IMAGE_PROVIDED;
private static final int NO_IMAGE_PROVIDED=-1;
private int mAudioResourceId;
//Constructor
public word(String defaultTranslation,String miwokTranslation,int audioResourceId){
mDefaultTranslation=defaultTranslation;
mMiwokTranslation=miwokTranslation;
mAudioResourceId=audioResourceId;
}
public word(String defaultTranslation,String miwokTranslation,int ImageResourceId,int audioResourceId){
mDefaultTranslation=defaultTranslation;
mMiwokTranslation=miwokTranslation;
mImageResourceId=ImageResourceId;
mAudioResourceId=audioResourceId;
}
//Getters
public String getDefaultTranslation(){
return mDefaultTranslation;
}
public String getMiwokTranslation(){
return mMiwokTranslation;
}
public int getImageResourceId(){return mImageResourceId;}
public boolean hasImage(){return mImageResourceId != NO_IMAGE_PROVIDED;}
public int getAudioResourceId(){return mAudioResourceId;}
这是 "words" arraylist:
final ArrayList<word> words = new ArrayList<word>();
words.add(new word("father", "әpә", R.drawable.family_father, R.raw.family_father));
words.add(new word("mother", "әṭa", R.drawable.family_mother, R.raw.family_mother));
words.add(new word("son", "angsi", R.drawable.family_son, R.raw.family_son));
words.add(new word("daughter", "tune", R.drawable.family_daughter, R.raw.family_daughter));
words.add(new word("older brother", "taachi", R.drawable.family_older_brother, R.raw.family_older_brother));
words.add(new word("younger brother", "chalitti", R.drawable.family_younger_brother, R.raw.family_younger_brother));
words.add(new word("older sister", "teṭe", R.drawable.family_younger_sister, R.raw.family_older_sister));
words.add(new word("ounger sister", "kolliti", R.drawable.family_younger_sister, R.raw.family_younger_sister));
words.add(new word("grandmother", "ama", R.drawable.family_grandmother, R.raw.family_grandmother));
words.add(new word("grandfather", "paapa", R.drawable.family_grandfather, R.raw.family_grandfather));
"Position"是列表项被点击的位置。就像您单击 "mother" 项目...位置将为 1,它从 0 开始。
.get(position) 是ArrayList 的方法.. 其中returns arraylist 的特定项取决于position.
是的,你可以这样保存word对象。
words是ArrayList,与ListView关联,所以调用onItemClicked时,取ListView中item的position。所以,如果你想获取特定对象,它与 position 上的 ListView 项相关联,你可以调用 ArrayList 的 get() 方法。您现在有 word 对象,它与 position 位置的列表项相关联。
Position 是您单击的项目在适配器中的视图数组中的索引。 get() 方法只是 returns 从数组中查看。
您可以引用部分视图并将它们的值保存为字符串、对象等。
What is "position"?
间接回答 - 想想点击监听器的目的。你在点击什么 - 一个项目。它需要知道您单击了 哪个 项目。因此,position
And what is ".get()" method?
这似乎是你自己回答的。 words
是一个数组列表。你如何 "get" Arraylist 中的项目?
无论哪种情况,JavaDoc 都可以回答这两个问题
can we save them in a word object?
什么是"them"?您 正在 获取 word
对象的实例,但是变量名称也恰好是 word
。
保存位置?我不建议这样做。当同一个对象可以在另一个列表中的某个不同位置时,将单词的位置存储在一个列表中有什么好处?
word
是引用类型。 ArrayList 单词包含对几个单词对象的引用。
words.get(position)
returns 对 ArrayList 中该索引处的单词对象的引用,从 0 开始。
word word = words.get(position)
引用 ArrayList words
中位置的单词并将其分配给 word
,因此 word
现在 'points' 到 ArrayList 中的对象.
在这行代码中:
word word = words.get(position);
"position"指的是列表中被点击的位置。你可以看到它作为一个int参数传递给了函数:
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
这里的 get() 方法很可能是 Java 的 List get 方法,returns 列表中给定索引处的项目: Java List javadoc
把它们放在一起,这一行就是说 "give me the 'word' object from the ArrayList 'words' that was clicked on, based on the int 'position' "
注意:另一个编码注释,通常的做法是用 "Word" 的开头大写字母命名 classes 而不是 "word"。这将避免混淆什么是 class 和什么是变量。