首页 > 解决方案 > 如何从 recyclerview 项目中打开活动?

问题描述

我正在尝试从 RecyclerView 打开另一个活动。我不明白如何使用该sendMessage()方法开始新活动。我已经使用该方法和另一个按钮来打开一个新活动,我想要做的就是打开一个相同的活动,但只是使用不同的活动。

我已经尝试将该sendMessage()方法插入到侦听器中。我尝试过使用意图。

@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 适配器:

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

标签: androidandroid-recyclerviewonclicklistener

解决方案


您可以setOnClickListener()GoalViewHolder. 您可以使用活动中的上下文初始化适配器:

mAdapter = new RVAdapter(mGoal, this);

Recycler View 适配器:

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

在你的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);
                    ...
                }
            });
...
}

推荐阅读