簡體   English   中英

如何使用 JAVA 在 android 的 RecyclerView 的其他活動中顯示不同的數據

[英]How to display different data in other activity in RecyclerView in android using JAVA

例如,我在回收站視圖中創建了一個活動,並給出了包含,即名稱、標題和標題,並且我將 OnClick 偵聽器放入適配器 class 中。 現在我想實現,當我點擊第一個項目時,它應該打開另一個活動,它應該顯示不同的數據,比如當點擊特定人的時候,它應該顯示他/她的 ssn 等詳細信息。我已經創建了所有這些但它顯示第一個活動中的相同數據和第二個活動中的相同數據。

第一項活動:

  • 名稱:xyz
  • 頭銜:創始人
  • 標題:真棒

單擊該 TextView 后,它應顯示為:第二個活動:

  • 名稱:xyz
  • 頭銜:創始人
  • 標題:真棒
  • 描述: Lorem ipsum dolor sit amet,consectetur adipiscing elit。 Duis aliquet, lectus sed laoreet lobortis, erat arcu sodales purus, ut pharetra quam erat ac quam。 Ut dui augue, suscipit vel dui eget, ultricies efficitur ante。 Mauris sollicitudin mattis nibh sed feugiat。

您可以使用參數從適配器啟動活動。

如果你需要傳遞 object,你應該將你的數據 class 實現為 Serializable 或 Parcelable。

數據 Class

您可以檢索從第一個活動傳遞的數據。

public class Data  implements Parcelable {

    public static String PARAM = "selected.data";

    private String name;
    private String title;
    private String heading;

    // Parcelable Implementations
    @Override
    public int describeContents() {
        return hashCode();
    }

    @Override
    public void writeToParcel(Parcel dest, int flags) {
        dest.writeString(name);
        dest.writeString(title);
        dest.writeString(heading);
    }

    public static final Parcelable.Creator<Data> CREATOR
            = new Parcelable.Creator<Data>() {
        public Data createFromParcel(Parcel in) {
            return new Data(in);
        }

        public Data[] newArray(int size) {
            return new Data[size];
        }
    };

    // Constructors
    // Getter & Setters
    // Override Equals and HashCode Methods
}

適配器 Class

適配器實現如下。 在這個示例代碼中,我實現了 ListAdater 而不是 RecyclerAdapter。

public class DataAdapter extends ListAdapter<Data, DataAdapter.DataVH> {

    public DataAdapter() {
        super(new DiffUtil.ItemCallback<Data>() {
            @Override
            public boolean areItemsTheSame(@NonNull Data oldItem, @NonNull Data newItem) {
                return oldItem.getName().equals(newItem.getName());
            }

            @Override
            public boolean areContentsTheSame(@NonNull Data oldItem, @NonNull Data newItem) {
                return oldItem.equals(newItem);
            }
        });
    }

    @NonNull
    @Override
    public DataVH onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.data_item, parent, false);
        return new DataVH(view);
    }

    @Override
    public void onBindViewHolder(@NonNull DataVH holder, int position) {
        holder.setData(getItem(position));
    }

    public static class DataVH extends RecyclerView.ViewHolder {

        private Data data;

        public DataVH(@NonNull View itemView) {
            super(itemView);

            itemView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    if(null != data) {

                        Context context = itemView.getContext();
                        // Start Second Activity With Data
                        Intent intent = new Intent(context, SecondActivity.class);

                        // Put Extra Data
                        intent.putExtra(Data.PARAM, data);

                        // Launch Activity
                        context.startActivity(intent);
                    }
                }
            });
        }

        public void setData(Data data) {
            this.data = data;
            setText(itemView.findViewById(R.id.name_label), data.getName());
            setText(itemView.findViewById(R.id.title_label), data.getTitle());
            setText(itemView.findViewById(R.id.heading_label), data.getHeading());
        }

        private void setText(TextView view, String text) {
            view.setText(text);
        }
    }
}

DataVH Class 將數據保存為 state 並將其作為 Intent Object 的額外數據。

第二次活動

這是從 DataVH 啟動的 Second Activity 中的代碼。

public class SecondActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_second);

        // Retrieve Data from Intent Object
        Data data = getIntent().getParcelableExtra(Data.PARAM);

        if(null != data) {
            setText(findViewById(R.id.text_name), data.getName());
            setText(findViewById(R.id.text_title), data.getTitle());
            setText(findViewById(R.id.text_heading), data.getHeading());
        }

    }

    private void setText(TextView view, String text) {
        view.setText(text);
    }
}

快樂編碼

問候!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM