1

У меня есть массив из 600 предметов. Я перечисляю все элементы массива в RecyclerView и хорошо прокручиваю. Но когда я пытаюсь получить доступ к onClick слушателю, он не получает. Я пытаюсь реализовать View.OnClickListener и переопределить onClick. Но он не работает.Android: RecyclerView onClick Listener не получает

Я хочу Toast элемент в элементе списка, когда пользователь нажимает одну из пункта строки в представлении

код адаптер

public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder> { 

public static class ViewHolder extends RecyclerView.ViewHolder 
     implements View.OnClickListener { 
    private String mItem; 
    private TextView mTextView; 

    public ViewHolder(View view) { 
     super(view); 
     view.setOnClickListener(this); 
     mTextView = (TextView) view.findViewById(R.id.item_title); 
    } 

    public void setItem(String item) { 
     mItem = item; 
     mTextView.setText(item); 
    } 

    @Override 
    public void onClick(View view) { 
     Log.d("TAG", "onClick " + getPosition() + " " + mItem); 
    } 
} 

private String[] mDataset; 

public MyAdapter(String[] dataset) { 
    mDataset = dataset; 
} 

@Override 
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
    View v = LayoutInflater.from(parent.getContext()) 
      .inflate(R.layout.item, parent, false); 
    ViewHolder vh = new ViewHolder(v); 
    return vh; 
} 

@Override 
public void onBindViewHolder(ViewHolder holder, int position) { 
    holder.setItem(mDataset[position]); 
} 

@Override 
public int getItemCount() { 
    return mDataset.length; 
} 

}

Может ли один пожалуйста, помогите мне Заранее спасибо :)

+0

Я использую тот же подход здесь http://stackoverflow.com/a/28304164/3077569 – Context

ответ

0

У меня есть создать пример проекта с использованием кода onClickListener работая fine.Like когда я нажимаю на пункт показывает мне Clicked позицию элемента в журнале.

MainActivity.java

public class MainActivity extends AppCompatActivity { 

    private MyAdapter mAdapter; 
    private RecyclerView mRecyclerView; 
    private String[] dataSet = {"Waleed", "Sarwar", "Yousuf"}; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     mAdapter = new MyAdapter(dataSet); 
     mRecyclerView = (RecyclerView) findViewById(R.id.recyclerView); 
     LinearLayoutManager linearLayoutManager = new LinearLayoutManager(this); 
     linearLayoutManager.setOrientation(LinearLayoutManager.VERTICAL); 
     mRecyclerView.setLayoutManager(linearLayoutManager); 
     mRecyclerView.setAdapter(mAdapter); 


    } 
} 

activity_main.xml

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    tools:context=".MainActivity"> 

    <android.support.v7.widget.RecyclerView 
     android:id="@+id/recyclerView" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:scrollbars="vertical" /> 
</LinearLayout> 

MyAdapter.java

public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder> { 

    private String[] mDataset; 

    public MyAdapter(String[] dataset) { 
     mDataset = dataset; 
    } 

    @Override 
    public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
     View v = LayoutInflater.from(parent.getContext()) 
       .inflate(R.layout.item, parent, false); 
     ViewHolder vh = new ViewHolder(v); 
     return vh; 
    } 

    @Override 
    public void onBindViewHolder(ViewHolder holder, int position) { 
     holder.setItem(mDataset[position]); 
    } 

    @Override 
    public int getItemCount() { 
     return mDataset.length; 
    } 

    public static class ViewHolder extends RecyclerView.ViewHolder 
      implements View.OnClickListener { 
     private String mItem; 
     private TextView mTextView; 

     public ViewHolder(View view) { 
      super(view); 
      view.setOnClickListener(this); 
      mTextView = (TextView) view.findViewById(R.id.item_title); 
     } 

     public void setItem(String item) { 
      mItem = item; 
      mTextView.setText(item); 
     } 

     @Override 
     public void onClick(View view) { 
      Log.d("TAG", "onClick " + getPosition() + " " + mItem); 
     } 
    } 
} 

item.xml

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="56dp" 
    android:layout_height="match_parent" 
    android:orientation="vertical"> 

    <TextView 
     android:id="@+id/item_title" 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" /> 

</LinearLayout> 

, если вы все еще сталкиваются с проблемой загрузки образца проекта из ниже ссылке.

https://www.dropbox.com/s/xf3y8oxok0zlgxk/RecyclerViewOnClick.zip?dl=0

+0

Спасибо @Waleed Сарвар –

+0

@BinilSurendran вы welcome.Please также отметить мой ответ правильный. – waleedsarwar86

0

pls см. jcobs и может вам помочь

RecyclerView recyclerView = findViewById(R.id.recycler); 
recyclerView.addOnItemTouchListener(
    new RecyclerItemClickListener(context, new RecyclerItemClickListener.OnItemClickListener() { 
     @Override public void onItemClick(View view, int position) { 
     // do whatever 
     } 
    }) 
); 

реализовать свой код в onitemclick. happy coding :)

0

Вы можете справиться с этим, установив на прослушиватель кликов в родительский вид. Recyclerview не предоставляет вам список элементов по умолчанию, аналогичный listview. Итак, создайте объект своего родительского макета и установите его в список.

Инициализация вашего владельца.

class UserListHolder extends RecyclerView.ViewHolder { 
     RelativeLayout layoutMain; 

     UserListHolder(View itemView) { 

     layoutMain = (RelativeLayout)itemView.findViewById(R.id.layoutSquadItem); 
    } 
} 

public void onBindViewHolder(RecyclerView.ViewHolder viewHolder,final int position) { 
((UserListHolder)viewHolder).layoutMain.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
       //handle click 
      } 
    }); 
} 

Вы также можете обратиться recycler view on click listner

Смежные вопросы