如何在Adapter类中设置的clickListener上获取项目位置?

时间:2015-11-08 13:54:53

标签: android gridview adapter android-mediaplayer

我正在创建一个非常简单的音箱应用程序。我正在使用包含项目(声音表示)的GridView。项目由ImageView和TextView

组成

我的适配器出了问题。这是代码:

public class SoundAdapter extends ArrayAdapter<Sound>{

    private Sound[] items;
    private Context context = null;

    public SoundAdapter(Context context, int textViewResourceId, Sound[] items) {
        super(context, textViewResourceId, items);
        this.items = items;
        this.context = context;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        View row = convertView;
        SoundHolder holder = null;

        if (row == null) {
            LayoutInflater vi = ((Activity)context).getLayoutInflater();
            row = vi.inflate(R.layout.list_row, null);

            holder = new SoundHolder();
            holder.imgIcon = (ImageView)row.findViewById(R.id.icon);
            holder.txtDescription = (TextView)row.findViewById(R.id.description);

            row.setTag(holder);

            //Here is the clickListener I want

        }else {
            holder = (SoundHolder)convertView.getTag();
        }

        Sound sound = items[position];

        if(sound != null){
            holder.txtDescription.setText(sound.getDescription());
            holder.imgIcon.setImageResource(R.drawable.muscle1);
        }

        return row;
    }

    static class SoundHolder
    {
        ImageView imgIcon;
        TextView txtDescription;
    }
}

目前我的mainView中的gridView上有一个onItemClickListener,它创建了一个与被点击的项目相关联的新MediaPlayer对象。所以click事件适用于所有项目(TextView + ImageView)

我想要做的只是在getView()方法中的ImageView上的clickListener,我在其中放置了注释行:

    holder.imgIcon.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        //create the MediaPlayer object
                        //start the media player
                    }
});

但是使用此解决方案,我无法访问clickListener中项目的位置。所以我不可能获得正确的声音。 (我需要获得声音的位置并创建MediaPlayer对象)

你对如何实现这样的目标有所了解吗?

提前谢谢。

1 个答案:

答案 0 :(得分:1)

  

在clickListener中我无法访问的位置参数   方法getView()

position方法的getView参数声明为final或使用getTag/setTag ImageView方法获取onClick方法中的位置。

使用getTag/setTag

    if (row == null) { 
        // your code here...
        row.setTag(holder);
    }else {
        holder = (SoundHolder)convertView.getTag();
    }
    Sound sound = items[position];
    // add click listener here
    holder.imgIcon.setTag(String.valueOf(position));

并在onClick方法中从v:

获取位置
@Override
   public void onClick(View v) {
      int pos=Integer.parseInt(v.getTag().toString());
      //create the MediaPlayer object
      //start the media player
  }