简体   繁体   English

如何从 recyclerview 项目打开活动?

[英]How to open an activity from a recyclerview item?

I am trying to open another activity from a RecyclerView.我正在尝试从 RecyclerView 打开另一个活动。 I'm not understanding how to use the sendMessage() method to start the new activity.我不明白如何使用sendMessage()方法来启动新活动。 I have used the method in with another button to open a new activity all I want to do is to open up a the same activity but just with a different activity.我已经使用了另一个按钮的方法来打开一个新活动,我想要做的就是打开一个相同的活动,但只是使用不同的活动。

I have tried pluggin the sendMessage() method into the listener.我尝试将sendMessage()方法插入监听器。 I have tried using an intent.我试过使用意图。

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    buildRecyclerView();
}

public void buildRecyclerView(){
    mRecyclerView = findViewById(R.id.rvGoals);
    mRecyclerView.setHasFixedSize(true);
    mLayoutManager = new LinearLayoutManager(this);
    mAdapter = new RVAdapter(mGoal);

    mRecyclerView.setLayoutManager(mLayoutManager);
    mRecyclerView.setAdapter(mAdapter);

    mAdapter.setOnItemClickListener(new RVAdapter.OnItemClickListener() {
        @Override
        public void onItemClick(int position) {
            mDrawerLayout = findViewById(R.id.nav_view);
            mDrawerLayout.openDrawer(Gravity.START);
        }

        @Override
        public void onAddClick(int position) {
            sendMessage();
        }
    });

public void sendMessage(View view) {
    Intent intent = new Intent(this,MainGoalInfo.class);
    startActivityForResult(intent,1);
}

Recycler View adapter:回收器视图适配器:

public class RVAdapter extends RecyclerView.Adapter<RVAdapter.GoalViewHolder> {
    private List<Goals> goalsRVA;
    private OnItemClickListener mListener;

    public interface OnItemClickListener{
        void onItemClick(int position);
        void onAddClick(int position);
    }

    public void setOnItemClickListener(OnItemClickListener listener){
        mListener = listener;
    }

    public RVAdapter(List<Goals> goalsRVA){
        this.goalsRVA=goalsRVA;
    }

    @Override
    public int getItemCount(){
        return goalsRVA.size();
    }

    @Override
    public GoalViewHolder onCreateViewHolder(ViewGroup viewGroup,int i){
        View v=LayoutInflater.from(viewGroup.getContext()).inflate(R.layout.goal_view,viewGroup,false);
        GoalViewHolder gvh=new GoalViewHolder(v,mListener);
        return gvh;
    }

    @Override
    public void onBindViewHolder(GoalViewHolder goalViewHolder, int i){
        goalViewHolder.goalDescriptionRV.setText(goalsRVA.get(i).getDescription());
        goalViewHolder.goalDueDateRV.setText(goalsRVA.get(i).getGoalDate());
        goalViewHolder.goalTitleRV.setText(goalsRVA.get(i).getGoal());
    }

    @Override
    public void onAttachedToRecyclerView(RecyclerView recyclerView){
        super.onAttachedToRecyclerView(recyclerView);
    }

    public static class GoalViewHolder extends RecyclerView.ViewHolder{
        CardView cv;
        TextView goalDescriptionRV;
        TextView goalDueDateRV;
        TextView goalTitleRV;
        ImageView mAddSubGoal;

        GoalViewHolder(View itemView, final OnItemClickListener listener){
            super(itemView);
            cv=itemView.findViewById(R.id.shit_view);
            goalTitleRV=itemView.findViewById(R.id.title);
            goalDueDateRV=itemView.findViewById(R.id.dueDate);
            goalDescriptionRV=itemView.findViewById(R.id.description);
            mAddSubGoal=itemView.findViewById(R.id.ADDSUBGOAL);

            itemView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    if (listener != null){
                        int position = getAdapterPosition();
                        if(position != RecyclerView.NO_POSITION){
                            listener.onItemClick(position);
                        }
                    }
                }
            });

            mAddSubGoal.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    if(listener != null){
                        int position = getAdapterPosition();
                        if(position != RecyclerView.NO_POSITION){
                            listener.onAddClick(position);
                        }
                    }
                }
            });
        }
    }
}

You can perform the desired action inside setOnClickListener() method of your GoalViewHolder .您可以执行内部所需的操作setOnClickListener()你的方法GoalViewHolder You can initialize the adapter with the context from your activity:您可以使用活动中的上下文初始化适配器:

mAdapter = new RVAdapter(mGoal, this);

Recycler View adapter:回收器视图适配器:

public class RVAdapter extends RecyclerView.Adapter<RVAdapter.GoalViewHolder> {
    private Context mContext;
    ...
    public RVAdapter(List<Goals> goalsRVA, Context mContext){
        this.goalsRVA=goalsRVA;
        this.mContext=mContext
    }

And in your GoalViewHolder :在你的GoalViewHolder

GoalViewHolder(View itemView, final OnItemClickListener listener){
            ...
            itemView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    Intent intent = new Intent(mContext,MainGoalInfo.class);
                    ((Activity) mContext).startActivityForResult(intent,1);
                    ...
                }
            });
...
}

You can do that from inside onbindViewHolder您可以从 onbindViewHolder 内部执行此操作

Send the context at the adapter constructor在适配器构造函数处发送上下文

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 如何通过单击来自recyclerview的项目来打开新活动 - How to open new activity from clicking an item from recyclerview 如何在 recyclerView 项目上打开不同的活动 onclick - How to open a different activity on recyclerView item onclick 在 RecyclerView 的新活动中打开项目(来自 json 的数据) - Open item in new activity from RecyclerView (data from json) Recyclerview item onClick 从 Main Activity Fragment 打开一个片段 - Recyclerview item onClick to open a fragment from Main Activity Fragment 当我单击 recyclerView 中的项目时打开特定活动 - Open an specific activity when I click an item from an recyclerView 如何将数据从recyclerview中的单击项传递到ViewModel并打开新活动? - How to pass data from clicked item in recyclerview to viewmodel and open new activity? 如何根据RecyclerView中的单击项在新活动中打开特定片段 - How to open specific Fragment in new Activity depending on clicked item in RecyclerView 在Firebase RecyclerView中单击项目时如何打开新活动 - How to open a new activity when an item is clicked in Firebase RecyclerView 在Firebase RecyclerView Cardview中单击项目时如何打开详细信息活动 - How to open a details activity when an item is clicked in Firebase RecyclerView Cardview 如何在RecyclerView中使用不同的数据和照片在项目单击上打开新的活动 - How to open new Activity on item click with different data and photo in RecyclerView
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM