在活动内部的 Imageview(Listview) 上设置 onClickListener



有没有办法在活动内部的Imageview(Listview(上设置onClickListener?我创建了这个,它在我的适配器中工作得很好,但它在我的活动中不起作用:

    @Override
   public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
    playPause=(ImageView)view.findViewById(R.id.playPause); 
     Product m = productList.get(position);
     playPause.setImageResource(m.getPlayPauseId());
     playPause.setTag(position);
     playPause.setOnClickListener(new View.OnClickListener() {
         @Override
         public void onClick(View v) {
                 int pos = (Integer) v.getTag();
                 Product m =productList.get(pos);
                 if (paused) {
                 m.setPlayPauseId(R.drawable.ic_pause);
                 paused=false;
                 }else {
                  m.setPlayPauseId(R.drawable.ic_play);
                  paused = true;
                }    
                 adapter.notifyDataSetChanged();
            }
        });
    }

这是我的产品类:

public class Product implements Serializable {
private int PlayPauseId;
@SerializedName("pid")
public int pid;
@SerializedName("name")
public String name;
@SerializedName("qty")
public int qty;
@SerializedName("price")
public String description;
@SerializedName("image_url")
public String image_url;
@SerializedName("date")
public String date;

public int getPlayPauseId() {
    return PlayPauseId;
}
public void setPlayPauseId(int playPauseId) {
    PlayPauseId = playPauseId;
        }
  }

适配器类(基金会库(:

public class FunDapter<T> extends BaseAdapter implements Filterable {
protected List<T> mDataItems;
protected List<T> mOrigDataItems;
protected LongExtractor<T> idExtractor;
protected final Context mContext;
private final int mLayoutResource;
private final BindDictionary<T> mBindDictionary;
private int oddColorRes;
private int evenColorRes;
private FunDapterFilter<T> funDapterFilter;
private Filter mFilter;

public FunDapter(Context context, List<T> dataItems, int layoutResource,
                 BindDictionary<T> dictionary) {
  this(context, dataItems, layoutResource, null, dictionary);
}

public FunDapter(Context context, List<T> dataItems, int layoutResource,
                 LongExtractor<T> idExtractor, BindDictionary<T> dictionary) {
    this.mContext = context;
    this.mDataItems = dataItems;
    this.mOrigDataItems = dataItems;
    this.mLayoutResource = layoutResource;
    this.idExtractor = idExtractor;
    this.mBindDictionary = dictionary;
}

public void updateData(List<T> dataItems) {
    this.mDataItems = dataItems;
    this.mOrigDataItems = dataItems;
    notifyDataSetChanged();
}
@Override
public int getCount() {
    if (mDataItems == null || mBindDictionary == null) return 0;
    return mDataItems.size();
}
@Override
public T getItem(int position) {
    return mDataItems.get(position);
}
@Override
public boolean hasStableIds() {
    if(idExtractor == null) return super.hasStableIds();
    else return true;
}
@Override
public long getItemId(int position) {
    if(idExtractor == null) return position;
    else return idExtractor.getLongValue(getItem(position), position);
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {

    View v = convertView;
    final GenericViewHolder holder;
    if (null == v) {
        LayoutInflater vi =
                (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        v = vi.inflate(mLayoutResource, null);
        holder = new GenericViewHolder();
        holder.root = v;


        FunDapterUtils.initViews(v, holder, mBindDictionary);
        v.setTag(holder);

    } else {
        holder = (GenericViewHolder) v.getTag();
    }

    final T item = getItem(position);
    showData(item, holder, position);


    return v;
}
您可以通过

两种方式进行操作:制作这样的界面

public interface ImageClick {
   public imageButtonOnClick(View view, int position)
} 

在你的活动中实现它,并在你的适配器getView中,设置imageOnClickListener,并在该onClick内调用这个接口方法,在其中传递你的位置和视图,这样你就可以在你的活动回调中使用位置等。

其次是在你的活动中创建一个方法,就像在界面中一样

public imageButtonOnClick(View view, int position)

在你的适配器中,在图像视图上的点击方法中,称其为类似

((YourActivity)context).imageButtonOnClick(params1, param2);

自定义 ArrayAdapter 并在方法 getView 中设置操作

请参阅此页面

列表视图,在安卓中每行都有添加和删除按钮

要单击活动本身列表视图中的图像,您必须回调

创建接口

public interface OnButtonClickListener {
public void onButtonClick(int position,View view);
}

在你的actvity类中实现OnButtonClickListener

你得到一个接口

@Override
public void onButtonClick(final int position, View view) {
    int id = view.getId();
    switch (id) {
        case R.id.YOURIMAGEVIEWID:
       //implent your process...
  }
}

在适配器 calss 中创建构造函数

 Context context;
 OnButtonClickListener callback
 public AdapterClass(Context context OnButtonClickListener buttonClickListener) {
    this.context = context;
    callback = buttonClickListener;
}

适配器类中的图像单击

holder.imageView..setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            callback.onButtonClick(position, v);
        }
    });

在你的行动课上

 AdapterClass Adapter = new AdapterClass(youractivity.this, youractivity.this);

为回调添加此类

public class ListCustomClickEvents implements OnClickListener,View.OnTouchListener {
private int position;
private OnCustomClickListener callback;

// Pass in the callback (this'll be the activity) and the row position
public ListCustomClickEvents(OnCustomClickListener callback, int pos) {
    position = pos;
    this.callback = callback;
}
@Override
public void onClick(View v) {
    callback.OnCustomClick(v, position);
}
}

最新更新