在我的Recycler Adapter中,我有以下内容:
public void onBindViewHolder(ViewHolder holder, int position) {
User userItem = mDataset.get(position);
holder.itemView.setTag(userItem);
...
}
在我的布局中,我有一个可点击的元素:
...
<FrameLayout
android:id="@+id/icon"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:background="@color/white"
android:layout_marginRight="15dp"
android:layout_marginBottom="15dp"
android:onClick="showActivity">
...
点击后,它应显示下一个活动。我需要传递我附加到它的标记,以便我可以使用下一个Activity中的数据。
我的活动中有以下showActivity
:
public void showActivity(View view) {
Intent intent = new Intent(this, SecondActivity.class);
// pass the model to the next activity
startActivity(intent);
}
我该怎么做?
答案 0 :(得分:0)
当您需要将数据从一个活动传递到另一个活动时,您使用Bundle。不幸的是,你不能传递任何你想要的对象,你需要将它转换为Bundle。
此外,这个onBindViewHolder()方法在哪里?如果它在Activity中,只需将数据保存在类变量中并在showActivity()上使用它。如果它在适配器中,您可以使用公共方法来实现项目的标记,并在活动中使用该方法。
答案 1 :(得分:0)
您的问题不明确,但我认为您希望将所选项目传递给下一个活动,而是传递其模型,只需通过点击侦听器中的数据包传递其数据。
试试这个:
public class AdapterClass extends RecyclerView.Adapter<AdapterClass.MyViewHolder> {
private LayoutInflater inflater;
private Context context;
List<Information>data= Collections.emptyList();
public AdapterClass(Context context,List<Information>data){
this.context=context;
inflater= LayoutInflater.from(context);
this.data=data;
}
@Override
public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View view= inflater.inflate(R.layout.custom_row,parent,false);
MyViewHolder holder=new MyViewHolder(view);
return holder;
}
@Override
public void onBindViewHolder(MyViewHolder holder, int position) {
Information current=data.get(position);
holder.title.setText(current.title);
holder.icon.setImageResource(current.iconId);
}
@Override
public int getItemCount() {
return data.size();
}
class MyViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener{
private final Context context;
TextView title;
ImageView icon;
public MyViewHolder(View itemView) {
super(itemView);
context = itemView.getContext();
title=(TextView)itemView.findViewById(R.id.listText);
icon=(ImageView)itemView.findViewById(R.id.listIcon);
//Set click listener on list item
itemView.setClickable(true);
itemView.setOnClickListener(this);
}
@Override
public void onClick(View v) {
//Get data of clicked item
Information item = data.get(getPosition());
Intent intent = new Intent(context, NextActivity.class);
//Create bundle which include title and icon and pass it to nextactivity
Bundle bundle = new Bundle();
bundle.putString("KEY_LIST_ITEM_TITLE", item.title);
bundle.putInt("KEY_LIST_ITEM_ICON", item.iconId);
//set bundle to intent
intent.putExtras(bundle);
context.startActivity(intent);
}
};
}
现在在NextActivity中只需从包
获取标题和图标 onCreate() {
.....
String title = getIntent().getExtras().getString("KEY_LIST_ITEM_TITLE");
int icon = getIntent().getExtras().getString("KEY_LIST_ITEM_ICON");
}
注意:如果要传递对象,则使用bundle.putParceable("ANY_KEY",object)
,对象类需要实现Parceable
接口。
答案 2 :(得分:0)
你的模型应该像以下那样实现Parcelable:
public class MyParcelable implements Parcelable {
private int mData;
public int describeContents() {
return 0;
}
public void writeToParcel(Parcel out, int flags) {
out.writeInt(mData);
}
public static final Parcelable.Creator<MyParcelable> CREATOR
= new Parcelable.Creator<MyParcelable>() {
public MyParcelable createFromParcel(Parcel in) {
return new MyParcelable(in);
}
public MyParcelable[] newArray(int size) {
return new MyParcelable[size];
}
};
private MyParcelable(Parcel in) {
mData = in.readInt();
}
}
然后使用它(intent.putExtra("mymodel",model);
)将模型传递给第二个Activity。
答案 3 :(得分:0)
每当您想要将数据从一个活动传递到其他活动时,您可以使用bundle和intent传递它。当您使用intent启动第二个活动时,您可以设置数据,在第二个活动中,您可以使用以下集合获取相同的数据: -
Intent mIntent = new Intent(this, SecondActivity.class);
Bundle extras = mIntent.getExtras();
extras.putString(key, value);
或
Intent mIntent = new Intent(this, SecondActivity.class);
Bundle mBundle = new Bundle();
mBundle.putString(key, value);
mIntent.putExtras(mBundle);
或 Intent mIntent = new Intent(this,SecondActivity.class); mIntent.putExtra(key,value);
并获取这样的值: -
String value = getIntent().getExtras().getString(key) ;