I want to go into a new Activity with the onClick() method but my code is not working. Can you please offer some advice. I have some issues with the recyclerView, since it\'
context.startActivity( new Intent(context, DifferentActivity.class););
Check here for full solution: How to open a different activity on recyclerView item onclick
This can be very useful for you to get to other Activities
first the recycler view adapter:
public class RecyclerViewAdapter extends RecyclerView.Adapter<RecyclerViewAdapter.ViewHolder> {
final private ListItemClickListener mOnClickListener;
String[] mStrings;
public MainMenuRVAdapter(String[] tvStrings, ListItemClickListener listener) {
mStrings = tvStrings;
mOnClickListener = listener;
}
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.customRow, parent, false);
return new ViewHolder(view);
}
@Override
public void onBindViewHolder(ViewHolder holder, int position) {
holder.bind(position);
}
@Override
public int getItemCount() {
return mStrings.length;
}
public interface ListItemClickListener {
void onListItemClick(int clickedItemIndex);
}
class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
TextView RowTV;
public ViewHolder (View itemView) {
super(itemView);
RowTV = (TextView) itemView.findViewById(R.id.RowTextView);
itemView.setOnClickListener(this);
}
void bind(int listIndex) {
RowTV.setText(mListStrings[listIndex]);
}
@Override
public void onClick(View v) {
int clickedPosition = getAdapterPosition();
mOnClickListener.onListItemClick(clickedPosition);
}
}
}
Then the MainActivity:
public class MainActivity extends AppCompatActivity
implements NavigationView.OnNavigationItemSelectedListener, MainMenuRVAdapter.ListItemClickListener {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
String[] stringsArray = getResources().getStringArray(R.array.mainStrings);
RecyclerView rv = (RecyclerView) findViewById(R.id.RV);
LinearLayoutManager layoutManager = new LinearLayoutManager(this);
rv.setLayoutManager(layoutManager);
rv.setAdapter(new MainMenuRVAdapter(stringsArray, this));
}
@Override
public void onListItemClick(int clickedItemIndex) {
Intent mIntent;
switch (clickedItemIndex) {
case 0: //first item in Recycler view
mIntent = new Intent (MainActivity.this, x.class);
startActivity(mIntent);
break;
case 1: //second item in Recycler view
mIntent = new Intent (MainActivity.this, y.class);
startActivity(mIntent);
break;
case 2: //third item in Recycler view
mIntent = new Intent (MainActivity.this, z.class);
startActivity(mIntent);
break;
}
you can use this method and add as many cases to the switch().
Hope I Helped.
Here is a nice solution for people using Kotlin, based on Naveen Yadav's answer:
val context = v.context
val intent = Intent(context, SecondActivity::class.java)
context.startActivity(intent)
I found the solution!:) There's this way of handling item click in Recyclerview with itemView given within the ViewHolder class:
public static class ViewHolder extends RecyclerView.ViewHolder {
public ViewHolder(LayoutInflater inflater, ViewGroup parent) {
super(inflater.inflate(R.layout.fragment_channel, parent, false));
itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Context context = v.getContext();
Intent intent = new Intent(context, ChannelDetailActivity.class);
context.startActivity(intent);
}
});
}
}
Change your logic to this:
Context baseContext;
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
//initial code
baseContext = getActivity();
}
@Override
public void onClick(View v) {
Intent intent = new Intent(baseContext, ChannelDetailActivity.class));
startActivity(intent);
}
Just Place these lines of code in onClick(View view)
view.getContext().startActivity(new
Intent(view.getContext(),SecondActivity.class));