[英]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.