Mehran
Mehran

Reputation: 501

Handling click on image button of listview from activity

I have a list view of songs with a play button Like this .. Now I need to click on this play buttons based on their positions and after click change the selected one into pause button .. but i have to do this inside my activity not in the adapter(getView).. Any suggestions !?

  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);


    }
});

Upvotes: 0

Views: 474

Answers (2)

Dhruv Tyagi
Dhruv Tyagi

Reputation: 812

use this in your activity

  1. Declare RecyclerView and set Layout Manager

  2. set Adapter

view.setAdapter(mAdapter);

  1. perform on click

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) {

    }
}

Upvotes: -1

Gabi
Gabi

Reputation: 667

Firstly, use a recyclerview instead of a listview. Afterwards, inside the adapter in onBindViewHolder method, handle clicks by addind a click listener to holder :

holder.setOnClickListener(...);

interface:

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

in adapter:

OnItemClicked listener;

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

downwards, on onBindViewHolder method :

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

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

and, finally, in your MainActivity:

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

Upvotes: 2

Related Questions