Reputation: 501
I have a list view of songs with a play button .. 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
Reputation: 812
use this in your activity
Declare RecyclerView and set Layout Manager
set Adapter
view.setAdapter(mAdapter);
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
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