从回收站视图行中的项目调用新活动
我需要调用一个新活动,当我的一个recyclerview行元素中的按钮被调用时。列表中的每一行都包含4个按钮,其中一个按钮需要打开一个新的活动,该活动将用于编辑该行中的数据。从回收站视图行中的项目调用新活动
这是迄今为止对我的按钮的代码:
因为我需要,我打开返回用户输入的数据对我来说,我使用startActivityForResult活动。但是,据我所知,这只会在实际的活动课堂中发挥作用。
所以然后我尝试将mainactivity上下文传递给我的CounterLayoutAdapter类,其中我的所有按钮代码都是。但是,OnBindViewHolder方法仍然无法在那里访问它。所以我试图将上下文传递给OnBindViewHolder,但这也不起作用,因为它不会覆盖抽象类,如果我这样做。
那么,我怎么可以在这里调用一个新的活动?
或者,如果有其他方法可以将用户输入到4个字段并将该输入返回到适配器,而无需调用活动,那也可以。
编辑:viewholder和布局通胀
public static class ViewHolder extends RecyclerView.ViewHolder implements
View.OnClickListener {
private TextView name;
private TextView comment;
private TextView number;
//private TextView date;
public ViewHolder(View itemView) {
super(itemView);
itemView.setOnClickListener(this);
comment = itemView.findViewById(R.id.textComment);
name = itemView.findViewById(R.id.textName);
number = itemView.findViewById(R.id.editTextNum);
//date = itemView.findViewById(R.id.textDate);
}
@Override
public void onClick(View view) {}
}
@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View inflatedView =
LayoutInflater.from(parent.getContext()).inflate(R.layout
.row_layout, parent, false);
return new ViewHolder(inflatedView);
}
您可以在适配器类中调用startActivityForResult()
。在适配器像Context context=holder.up.getContext();
然后在按钮的OnClickListener
- 获取上下文做到这一点。
edit.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { Intent intent=new Intent(context,ActivityYouWantToStart.class); //Pass any extras if you want to. ((Activity)context).startActivityForResult(intent,REQUEST_CODE); } });
-
然后在你的活动(包含此recyclerView)覆盖
onActivityResult
这样@Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (requestCode == REQUEST_CODE) {//same REQUEST_CODE you used in adapter if (resultCode == RESULT_OK) { //Do your thing and get the data you want. adapter.onDataReady(Data data);//where adapter is your recycler adapter, //and data is whatever data you want to pass to adapter //(Data you got from the activityResult, do not confuse it with onActivityResult's parameter 'Intent data') } } }
-
最后,在你的回收站适配器类,这样定义
public void onDataReady(Data data){ //Update RecyclerView with new data }
onDataReady()
功能希望这有助于。我曾经这样做过,它对我有用。如果您有任何问题,请告诉我。
获取上下文的方法不起作用,但onDataReady函数无论如何解决了我的问题。 – user2782067
正如你看到的,你不必findViewById
在onBindViewHolder
。
public void onBindViewHolder(CounterLayoutAdapter.ViewHolder holder, final
int position) {
final Counter counter = counterList.get(position);
//counter is a class which holds the data that will be displayed on one
//row
String comment = counter.getComment();
String name = counter.getCounterName();
int number = counter.getCurrentValue();
//LocalDate modifyDate = counter.getLastModifyDate();
holder.edit.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
}
});
那么你应该在ViewHolder
构造函数初始化edit
。
public ViewHolder(View itemView) {
super(itemView);
itemView.setOnClickListener(this);
comment = itemView.findViewById(R.id.textComment);
name = itemView.findViewById(R.id.textName);
number = itemView.findViewById(R.id.editTextNum);
//date = itemView.findViewById(R.id.textDate);
// init four button
edit = itemView.findViewById(R.id.buttonEdit)
}
你膨胀任何布局? –
是的,我膨胀我的布局,我将该代码添加到帖子。 – user2782067