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

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

Буду признателен за помощь.

AdapterClass.java

 public class AdapterClass extends RecyclerView.Adapter<AdapterClass.MyViewHolder> { private LayoutInflater inflater; private Context context; List<Information>data= Collections.emptyList(); public AdapterClass(Context context,List<Information>data){ 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.<init>(ToolbarWidgetWrapper.java:95) 02-27 15:24:52.834: E/AndroidRuntime(1630): at android.support.v7.internal.widget.ToolbarWidgetWrapper.<init>(ToolbarWidgetWrapper.java:88) 02-27 15:24:52.834: E/AndroidRuntime(1630): at android.support.v7.internal.app.ToolbarActionBar.<init>(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 

Solutions Collecting From Web of "Как открыть другое действие по элементу recyclerView onclick"

Я думаю, что это легко. Вы можете (но вам не нужно, потому что класс 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.Adapter<AdapterClass.MyViewHolder>implements 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); } 

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