Start new Activity with onClick() in RecyclerView

后端 未结 10 734
渐次进展
渐次进展 2020-12-03 06:12

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\'

相关标签:
10条回答
  • 2020-12-03 06:18
    context.startActivity( new Intent(context, DifferentActivity.class););
    

    Check here for full solution: How to open a different activity on recyclerView item onclick

    0 讨论(0)
  • 2020-12-03 06:19

    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.

    0 讨论(0)
  • 2020-12-03 06:20

    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)
    
    0 讨论(0)
  • 2020-12-03 06:21

    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);
                    }
                });
            }
        }

    0 讨论(0)
  • 2020-12-03 06:24

    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);
    
                }
    
    0 讨论(0)
  • 2020-12-03 06:29

    Just Place these lines of code in onClick(View view)

     view.getContext().startActivity(new 
     Intent(view.getContext(),SecondActivity.class));
    
    0 讨论(0)
提交回复
热议问题