#android #android-recyclerview
#Android #android-recyclerview
Вопрос:
Я пытаюсь установить OnClickListener на одно из моих изображений в моем recyclerview, но щелчок не работает.
Похоже, что он, похоже, не видит, что есть OnClickListener, потому что, когда я устанавливаю «точку» для отладчика на моем слушателе, он не переходит к точке.
Что я сделал не так?
public class Item_List_Adapter extends RecyclerView.Adapter<Item_List_Adapter.MyViewHolder> {
// declare array
private String[] mDataset;
private Context mContext;
public static class MyViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener{
public TextView itemName;
public ImageView mAddBtn;
public MyViewHolder(View v){
super(v);
itemName = (TextView) v.findViewById(R.id.item_name);
mAddBtn = (ImageView) v.findViewById(R.id.action_add);
}
@Override
public void onClick(View v) {
System.out.println("TEST: ");
switch (v.getId()) {
case R.id.action_add:
System.out.println("TEST2: ");
break;
default:
break;
}
}
}
// constructor
public Item_List_Adapter(Context context, String[] myDataset) {
mDataset = myDataset;
mContext = context;
}
@Override
public int getItemCount() {
return mDataset.length;
}
@Override
public Item_List_Adapter.MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
// create a new view
View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_list, parent, false);
MyViewHolder nv = new MyViewHolder(v);
return nv;
}
@Override
public void onBindViewHolder(Item_List_Adapter.MyViewHolder holder, final int position) {
holder.itemName.setText(mDataset[position]);
holder.mAddBtn.setOnClickListener(holder);
}
}
и мой XML-файл, который раздувается в представлении recycler
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingTop="10dp"
android:paddingBottom="10dp">
<LinearLayout
android:id="@ id/list_item"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:layout_marginEnd="15dp"
android:layout_marginStart="15dp">
<ImageView
android:id="@ id/action_check"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/ic_action_check"
android:alpha="0.3"
/>
<TextView
android:id="@ id/item_name"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_weight=".2"
android:hint="Wine"
android:alpha="0.3"
android:gravity="start|center"
android:paddingStart="5dp"
android:paddingLeft="5dp"/>
<ImageView
android:id="@ id/action_remove"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/ic_action_remove_green"
android:onClick="item_remove"
/>
<ImageView
android:id="@ id/action_add"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/ic_action_add_blue"
/>
<ImageView
android:id="@ id/action_chart"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/ic_action_chart"
android:scaleType="centerInside"
android:onClick="chart_detail"
/>
</LinearLayout>
</LinearLayout>
Заранее спасибо
Комментарии:
1. лучше использовать его так:
holder.mAddBtn.setOnClickListener(holder)
и реализоватьOnClickListener
интерфейс в вашемMyViewHolder
2. Что вы имеете в виду? Потому что, если я напишу это, я получу: setOnClickListener(android.view.View. OnClickListener) в представлении не может быть применен к (com.app.pierre.myapp.adapter. Item_List_Adapter. MyViewHolder)
3. попробуйте добавить onclicklistener в свой конструктор viewholder 😉
4. Я отредактировал свой вопрос с вашим ответом, поэтому я внедрил OnClickListener в MyViewHolder и переопределил метод onclick, затем в onBindViewHodler я добавил setOnClickListener.. но все равно не работает: (
5. можете ли вы также показать xml, пожалуйста
Ответ №1:
вы должны использовать журнал для вывода на консоль
Log.d("TAG","TEST: );
для эксперимента попробуйте это в вашем конструкторе ViewHolder
mAddBtn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Log.d("TAG","TEST: );
}
});
Если это не работает, значит, что-то блокирует щелчок, это может быть просто установка clickable=»true» в xml или выяснение того, что находится перед представлением
Комментарии:
1. Спасибо за ваш ответ, в журнале тоже ничего не отображается. Я уже удалил все кликабельные = true из своего xml. Что еще может заблокировать щелчок?
2. Я добавил свой XML на свой вопрос.
3. можете ли вы попробовать без строк android: onClick в xml
Ответ №2:
Ниже показано, как я использовал в своем адаптере. Надеюсь, это поможет:
public class EventArrayAdapter extends RecyclerView.Adapter<ViewHolder> {
private OnItemClickListener onItemClickListener;
public OnItemClickListener getOnItemClickListener() {
return onItemClickListener;
}
public void setOnItemClickListener(OnItemClickListener onItemClickListener) {
this.onItemClickListener = onItemClickListener;
}
public interface OnItemClickListener {
public void onItemClick(View view, int position);
}
@Override
public void onBindViewHolder(final ViewHolder holder, final int position) {
//Add your viewHolder.button.setOnClickListener here as normal
}
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int arg1) {
// TODO Auto-generated method stub
View v = LayoutInflater.from(context).inflate(
R.layout.layout_item_event, parent, false);
final EventViewHolder holder = new EventViewHolder(v);
v.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
onItemClickListener.onItemClick(v, holder.getAdapterPosition());
}
});
return holder;
}
}
Ответ №3:
обновите свой конструктор следующим образом и попробуйте. Это будет работать.
public MyViewHolder(View v){
super(v);
itemName = (TextView) v.findViewById(R.id.item_name);
mAddBtn = (ImageView) v.findViewById(R.id.action_add);
mAddBtn.setOnClickListener(this);
}
В основном назначьте прослушиватель onClick вашему Imageview