【问题标题】:Pass RecyclerView item position of Fragment One to another RecyclerView Adapter of Fragment Two将 Fragment 1 的 RecyclerView 项目位置传递给 Fragment 2 的另一个 RecyclerView Adapter
【发布时间】:2018-03-05 07:08:53
【问题描述】:

我已经在Fragment 一中设置了Recyclerview。我想将 RecyclerView 项目的位置从片段一的 RecyclerView 适配器发送到片段二的 RecyclerView 适配器,以在片段二中设置 RecyclerView 的特定项目。
这是片段一适配器的代码

@Override
    public void onBindViewHolder(final ViewHolder holder, int position) {
           final CurrentStatusEntry current=filterList.get(position);
          // holder.number.setText(current.getNo());
           holder.Name.setText(current.getName());
           holder.People.setText(current.getPeople());
           holder.Time.setText(current.getTime());
            holder.itemView.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {

                    int position=holder.getAdapterPosition();

                    AppCompatActivity activity=(AppCompatActivity)v.getContext();
                    activity.getSupportFragmentManager().beginTransaction().replace(R.id.frame,satusInfo).addToBackStack("info").commit();
                }
            });  

如何通过这个位置?

【问题讨论】:

  • 你可以通过create Bundle和setArguments传递数据片段。捆绑参数 = 新捆绑(); args.putInt("位置", 位置); statusInfo.setArguments(args);
  • 但是如何在第二个片段的 AdapterClass 中接收该数据。
  • 你必须看看这篇文章。 pass data between fragments
  • 有了这个我可以得到另一个片段中的值。但是适配器位置是从适配器类设置的,所以如何访问适配器类中的值

标签: android android-recyclerview fragment


【解决方案1】:

您可以使用Bundle 进行此尝试,如下例所示:

在片段一中setArguments

Fragment fragment = new Fragment();
Bundle bundle = new Bundle();
bundle.putInt(key, value);
fragment.setArguments(bundle);

在第二个片段getArguments

Bundle bundle = this.getArguments();
if (bundle != null) {
    int myInt = bundle.getInt(key, defaultValue);
}

参考安卓Doc.

【讨论】:

    【解决方案2】:

    在片段一后片段实例到片段二

    getFragmentManager().beginTransaction()
                                    .replace(R.id.ftHolder, fragmentTwo.newInstance(getAdapterPosition()))
                                    .addToBackStack("info")
                                    .commit();
    

    在片段二中添加此功能

    public static fragmentTwo newInstance(int position) {
        fragmentTwo fragment = new fragmentTwo();
        Bundle bdl = new Bundle();
        bdl.putInt("position", position);
        fragment.setArguments(bdl);
        return fragment;
    }
    

    并在 onCreate() 或 onActivityCreated() 中获取并在任何地方使用它

    position = getArguments().getInt("position");
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-11
      • 2021-05-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多