将模型设置为标记,单击时传递给Activity

时间:2015-09-15 02:11:20

标签: android android-fragments android-intent android-activity

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

我该怎么做?

4 个答案:

答案 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) ;