解释在setOnItemClickListener中处理对象的逻辑

时间:2016-09-06 13:05:04

标签: java android onitemclicklistener

请查看以下代码:

 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 单击该ListView中的行时,此方法会截取单击并播放该项目的相应歌曲。

在第四行中,您会看到以下代码:word word = words.get(position);

  • 什么是“位置”?
  • 什么是“.get()”方法?
  • 我们可以将它们保存在单词对象中吗?

请问您能解释一下这段特定的代码吗?

PS:有关更多详细信息,我将向您展示“单词”类以及“单词”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;}

这是“词汇”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));

6 个答案:

答案 0 :(得分:0)

“位置”是单击列表项的位置。就像你点击“母亲”项目...位置将是1,它从0开始。

.get(position)是ArrayList的方法..它根据位置返回arraylist的特定项。

是的,您可以像这样保存单词对象。

答案 1 :(得分:0)

单词是ArrayList,它与ListView相关联,因此当调用onItemClicked时,您可以在ListView中获取项目的位置。因此,如果要获取与位置上的ListView项相关联的特定对象,则调用ArrayList的 get ()方法。您现在有单词对象,该对象与位置位置的列表项相关联。

答案 2 :(得分:0)

Position是您单击的项目的适配器中的视图数组中的索引。 get()方法只返回数组中的那个视图。

您可以引用视图的某些部分并将其值保存为字符串,对象等

答案 3 :(得分:0)

  

什么是“职位”?

间接答案 - 考虑点击监听器的目的。你点击什么 - 一个项目。它需要知道您点击的哪个项目。因此,position

  

什么是“.get()”方法?

这似乎是你自己回答的。 words是一个Arraylist。你怎么从Arraylist“获得”一个项目?

在任何一种情况下,JavaDoc都可以回答这两个问题

  

我们可以将它们保存在单词对象中吗?

什么是“他们”?您 获取word对象的实例,但变量名也恰好是word

保存位置?我不建议这样做。当同一个对象可以在另一个列表中,在某个不同的位置时,将该单词的位置存储在一个列表中会有什么用呢?

答案 4 :(得分:0)

word是参考类型。 ArrayList单词包含对多个单词对象的引用。 words.get(position)从0开始返回该索引处ArrayList中单词对象的引用。 word word = words.get(position)引用ArrayList words中位置处的单词并将其分配给word,以便word现在指向&#39;到ArrayList中的对象。

答案 5 :(得分:0)

在这行代码中:

word word = words.get(position);

“position”是指单击列表中的位置。您可以看到它作为int参数传递给函数:

public void onItemClick(AdapterView<?> parent, View view, int position, long id) {

get()方法很可能是Java的List get方法,它返回给定索引的列表中的项: Java List javadoc



要将它们组合在一起,这一行就是说“根据int'位置',点击”ArrayList'中的''对象''对象'“



注意:另一个编码注释,通常的做法是使用开头大写字母命名类,如“Word”而不是“word”。这样可以避免在什么是类和什么是变量之间产生混淆。