Как открыть другое действие для элемента recyclerView onclick

Я использую recyclerView для отображения моих listitems в navigation drawer Я реализовал onclickListener но я застрял на том, как открыть другое activity при clicked элементов . Все мои предметы делают на клике на данный момент, так как код должен отображать toast с item position .

Я был бы признателен за помощь.

AdapterClass.java

 public class AdapterClass extends RecyclerView.Adapter { private LayoutInflater inflater; private Context context; Listdata= Collections.emptyList(); public AdapterClass(Context context,Listdata){ this.context=context; inflater= LayoutInflater.from(context); this.data=data; } @Override public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View view= inflater.inflate(R.layout.custom_row,parent,false); MyViewHolder holder=new MyViewHolder(view); return holder; } @Override public void onBindViewHolder(MyViewHolder holder, int position) { Information current=data.get(position); holder.title.setText(current.title); holder.icon.setImageResource(current.iconId); } @Override public int getItemCount() { return data.size(); } class MyViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener{ TextView title; ImageView icon; public MyViewHolder(View itemView) { super(itemView); title=(TextView)itemView.findViewById(R.id.listText); icon=(ImageView)itemView.findViewById(R.id.listIcon); itemView.setClickable(true); itemView.setOnClickListener(this); } @Override public void onClick(View v) { Toast.makeText(context,"The Item Clicked is: "+getPosition(),Toast.LENGTH_SHORT).show(); } }; } 

 Log cat error after implementing Konrad's solution 02-27 15:24:52.833: D/AndroidRuntime(1630): --------- beginning of crash 02-27 15:24:52.834: E/AndroidRuntime(1630): FATAL EXCEPTION: main 02-27 15:24:52.834: E/AndroidRuntime(1630): Process: com.snappy.stevekamau.snappy, PID: 1630 02-27 15:24:52.834: E/AndroidRuntime(1630): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.snappy.stevekamau.snappy/com.snappy.stevekamau.snappy.YourActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.CharSequence android.support.v7.widget.Toolbar.getTitle()' on a null object reference 02-27 15:24:52.834: E/AndroidRuntime(1630): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2298) 02-27 15:24:52.834: E/AndroidRuntime(1630): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2360) 02-27 15:24:52.834: E/AndroidRuntime(1630): at android.app.ActivityThread.access$800(ActivityThread.java:144) 02-27 15:24:52.834: E/AndroidRuntime(1630): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1278) 02-27 15:24:52.834: E/AndroidRuntime(1630): at android.os.Handler.dispatchMessage(Handler.java:102) 02-27 15:24:52.834: E/AndroidRuntime(1630): at android.os.Looper.loop(Looper.java:135) 02-27 15:24:52.834: E/AndroidRuntime(1630): at android.app.ActivityThread.main(ActivityThread.java:5221) 02-27 15:24:52.834: E/AndroidRuntime(1630): at java.lang.reflect.Method.invoke(Native Method) 02-27 15:24:52.834: E/AndroidRuntime(1630): at java.lang.reflect.Method.invoke(Method.java:372) 02-27 15:24:52.834: E/AndroidRuntime(1630): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899) 02-27 15:24:52.834: E/AndroidRuntime(1630): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694) 02-27 15:24:52.834: E/AndroidRuntime(1630): Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'java.lang.CharSequence android.support.v7.widget.Toolbar.getTitle()' on a null object reference 02-27 15:24:52.834: E/AndroidRuntime(1630): at android.support.v7.internal.widget.ToolbarWidgetWrapper.(ToolbarWidgetWrapper.java:95) 02-27 15:24:52.834: E/AndroidRuntime(1630): at android.support.v7.internal.widget.ToolbarWidgetWrapper.(ToolbarWidgetWrapper.java:88) 02-27 15:24:52.834: E/AndroidRuntime(1630): at android.support.v7.internal.app.ToolbarActionBar.(ToolbarActionBar.java:84) 02-27 15:24:52.834: E/AndroidRuntime(1630): at android.support.v7.app.ActionBarActivityDelegateBase.setSupportActionBar(ActionBarActivityDelegateBase.java:175) 02-27 15:24:52.834: E/AndroidRuntime(1630): at android.support.v7.app.ActionBarActivity.setSupportActionBar(ActionBarActivity.java:92) 02-27 15:24:52.834: E/AndroidRuntime(1630): at com.snappy.stevekamau.snappy.YourActivity.onCreate(YourActivity.java:18) 02-27 15:24:52.834: E/AndroidRuntime(1630): at android.app.Activity.performCreate(Activity.java:5933) 02-27 15:24:52.834: E/AndroidRuntime(1630): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1105) 02-27 15:24:52.834: E/AndroidRuntime(1630): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2251) 02-27 15:24:52.834: E/AndroidRuntime(1630): ... 10 more 02-27 15:24:52.839: W/ActivityManager(464): Force finishing activity com.snappy.stevekamau.snappy/.YourActivity 02-27 15:24:52.841: W/ActivityManager(464): Force finishing activity com.snappy.stevekamau.snappy/.MainActivity 

Вы можете (но не нужно, потому что class ViewHolder не является статическим) создают контекст поля, как показано ниже:

 private final Context context; public MyViewHolder(View itemView) { super(itemView); context = itemView.getContext(); ... } 

и по вашему методу onClick просто вызовите sth, как показано ниже:

 @Override public void onClick(View v) { final Intent intent; switch (getAdapterPostion()){ case 0: intent = new Intent(context, FirstActivity.class); break; case 1: intent = new Intent(context, SecondActivity.class); break; ... default: intent = new Intent(context, DefaultActivity.class); break; } context.startActivity(intent); } 

или

 @Override public void onClick(View v) { final Intent intent; if (getAdapterPosition() == sth){ intent = new Intent(context, OneActivity.class); } else if (getPosition() == sth2){ intent = new Intent(context, SecondActivity.class); } else { intent = new Intent(context, DifferentActivity.class); } context.startActivity(intent); } 

вы можете реализовать свой адаптер onClickListener:

  public class AdapterClass extends RecyclerView.Adapterimplements View.OnClickListener 

и использовать интерфейс с методом в нем

 public interface mClickListener { public void mClick(View v, int position); } 

и в вашем методе onClick вызовите метод в интерфейсе и передайте ему вид и позицию

в вашей основной деятельности реализуйте этот интерфейс

 public class MainActivity extends ActionBarActivity implements AdapterClass.mClickListener 

и переопределить этот метод

 @Override public void onCommentsClick(View v, int position) { final Intent intent = new Intent(this, OtherActivity.class); } 

так как лучше управлять переходом вашей деятельности по активности, а не другим classам

Этот вопрос был задан давно, во всяком случае, я бы написал простой ответ, если он поможет кому-то.

Самый простой способ подключить элемент clickListener к элементам RecyclerView находится в адаптере, как показано ниже:

  @Override public void onBindViewHolder(MyViewHolder holder, int position) { holder.itemView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { Intent intent = new Intent(getContext() , yourActivity.Class) startActivity(intent); } }); } 
  • Образец в MyRecyclerViewAdapter добавьте метод:

     public interface ItemClickListener { void onItemClick(View view, int position); } 
  • В MainActivity.java

     @Override public void onItemClick(View view, int position) { Context context=view.getContext(); Intent intent=new Intent(); switch (position){ case 0: intent = new Intent(context, ChildActivity.class); context.startActivity(intent); break; } } 

Просто вы можете сделать это легко … Вам просто нужно получить контекст своей деятельности, здесь, из вашего представления.

 //Create intent getting the context of your View and the class where you want to go Intent intent = new Intent(view.getContext(), YourClass.class); //start the activity from the view/context view.getContext().startActivity(intent); //If you are inside activity, otherwise pass context to this funtion 

Помните, что вам нужно изменить AndroidManifest.xml и поместить мероприятие …

  
 public class AdapterClass extends RecyclerView.Adapter { private LayoutInflater inflater; private Context context; Listdata= Collections.emptyList(); public AdapterClass(Context context,Listdata){ this.context=context; inflater= LayoutInflater.from(context); this.data=data; } @Override public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View view= inflater.inflate(R.layout.custom_row,parent,false); MyViewHolder holder=new MyViewHolder(view); return holder; } @Override public void onBindViewHolder(MyViewHolder holder, int position) { Information current=data.get(position); holder.title.setText(current.title); holder.icon.setImageResource(current.iconId); } @Override public int getItemCount() { return data.size(); } class MyViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener{ TextView title; ImageView icon; public MyViewHolder(View itemView) { super(itemView); title=(TextView)itemView.findViewById(R.id.listText); icon=(ImageView)itemView.findViewById(R.id.listIcon); itemView.setClickable(true); itemView.setOnClickListener(this); } @Override public void onClick(View v) { Toast.makeText(context,"The Item Clicked is: "+getPosition(),Toast.LENGTH_SHORT).show(); } }; } 
  • Расширяемый список с RecyclerView?
  • CheckBox в RecyclerView продолжает проверять разные элементы
  • RecyclerView и java.lang.IndexOutOfBoundsException: обнаружена несогласованность. Недействительный адаптер держателя держателя ViewView в устройствах Samsung
  • Проведите по экрану для RecyclerView
  • Recyclerview не вызывать onCreateViewHolder
  • Как добавить прослушиватель Onclick в режим просмотра ресайклеров
  • Простой пример Android RecyclerView
  • RecyclerView прокручивал прослушиватель UP / DOWN
  • Как иметь ListView / RecyclerView внутри родительского RecyclerView?
  • Давайте будем гением компьютера.