【问题标题】:Handling click on image button of listview from activity处理从活动中单击列表视图的图像按钮
【发布时间】:2017-02-09 11:57:56
【问题描述】:

我有一个带有播放按钮的歌曲列表视图 .. 现在我需要根据它们的位置单击此播放按钮,然后单击将选定的按钮更改为暂停按钮..但我必须在我的活动中而不是在适配器(getView)中执行此操作..有什么建议!?

  lv.setOnItemClickListener(new OnItemClickListener() {

    @Override
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
      //productList is my ArrayList<Product> and
      //Product is my Serializable class that holds
      // items that is in mysql database
      Product selectedProduct = productList.get(position);


    }
});

【问题讨论】:

  • 请具体并更新您的问题
  • 我认为我的问题不仅仅是具体的

标签: android listview android-adapter


【解决方案1】:

首先,使用recyclerview 而不是listview。然后,在 onBindViewHolder 方法中的适配器内部,通过向持有者添加点击侦听器来处理点击:

holder.setOnClickListener(...);

界面:

public interface OnItemClicked{
    void onItemClicked(/*HERE YOUR VARIABLES TO PASS FROM ADAPTER TO MAINACTIVITY);
}

在适配器中:

OnItemClicked listener;

public void setOnItemClickedListener(OnItemClicked listener){
    this.listener = listener;
}

向下,onBindViewHolder 方法:

@Override
public ViewHolder onBindViewHolder(... params){
    ...your code

    holder.setOnClickListener(new View.OnClickListener{
        @Override
        public void onClick(View v){
            if(listener != null)
                listener.onItemClicked()
        }
    });
}

最后,在您的 MainActivity 中:

adapter.setOnItemClickedListener(new OnItemClicked ... ) <- here will pop up autocomplete

【讨论】:

  • 我只是说我需要在我的活动中这样做
  • 好吧,创建一个自定义接口并添加一个监听器。让我编辑我的帖子,向您展示如何操作。
【解决方案2】:

在你的活动中使用它

  1. 声明RecyclerView并设置LayoutManager

  2. 设置适配器

view.setAdapter(mAdapter);

  1. 点击执行

v

view.addOnitemTouchListener(

new RecyclerItemClickListener(getApplicationContext(), new RecyclerItemClickListener.OnItemClickListener() {

                    @Override
                    public void onItemClick(View view, int position) {

                        //do something
                    }
                })
        );

RecyclerItemClickListener:

public class RecyclerItemClickListener implements RecyclerView.OnItemTouchListener {
    private OnItemClickListener mListener;

    public interface OnItemClickListener {
        public void onItemClick(View view, int position);
    }

    GestureDetector mGestureDetector;

    public RecyclerItemClickListener(Context context, OnItemClickListener listener) {
        mListener = listener;
        mGestureDetector = new GestureDetector(context, new GestureDetector.SimpleOnGestureListener() {
            @Override
            public boolean onSingleTapUp(MotionEvent e) {
                return true;
            }
        });
    }

    @Override
    public boolean onInterceptTouchEvent(RecyclerView view, MotionEvent e) {
        View childView = view.findChildViewUnder(e.getX(), e.getY());
        if (childView != null && mListener != null && mGestureDetector.onTouchEvent(e)) {
            mListener.onItemClick(childView, view.getChildAdapterPosition(childView));
        }
        return false;
    }

    @Override
    public void onTouchEvent(RecyclerView view, MotionEvent motionEvent) {
    }

    @Override
    public void onRequestDisallowInterceptTouchEvent(boolean disallowIntercept) {

    }
}

【讨论】:

  • 好像是从here复制的,你可以这样做,但要注明出处!
  • 因为RecyclerItemClickListener 是一个自定义类。不属于 RecyclerView API。
  • 我用过但我不知道来源参考...顺便说一下thanq
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-13
相关资源
最近更新 更多