微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

android通过bundle将数据从片段传递到适配器

如何解决android通过bundle将数据从片段传递到适配器

我使用 cardview 显示数据并在 cardview 上有 menuItem。单击菜单项后,我会打开一个新片段并希望传递 id(来自相应的卡片)。我尝试使用互联网上提到的不同方式,但我出错了。下面是我用来将数据从片段发送到我的适配器的代码

  id = pobj.getString("id");
  Intent intent = new Intent(getActivity(),CustomAdapter.class);
  intent.putExtra("id",id);

自定义适配器

public class CustomAdapter extends RecyclerView.Adapter<CustomAdapter.ViewHolder> {
Context mCtx;
private List<Mylist> names;
View view;
SharedPreferences preferences;
String id;
public CustomAdapter(View view,List<Mylist> names,Context mCtx) {
    this.names = names;
    this.mCtx = mCtx;
    this.view =view;
}

@Override
public ViewHolder onCreateViewHolder(ViewGroup parent,int viewType) {
    View v = LayoutInflater.from(parent.getContext())
            .inflate(R.layout.list_items,parent,false);

    return new ViewHolder(v);
}
public void filterList(List<Mylist> filterdNames) {
    this.names = filterdNames;
    notifyDataSetChanged();
}
@Override
public void onBindViewHolder(final CustomAdapter.ViewHolder holder,final int position) {
    Mylist mylist = names.get(position);

    holder.year.setText(mylist.getPurchase_year());
    holder.areatype.setText(mylist.getProperty_type());
    holder.area.setText(mylist.getSize());
holder.buttonViewOption.setonClickListener(new View.OnClickListener() {
        @Override
        public void onClick(final View view) {

            //will show popup menu here
            //creating a popup menu
            PopupMenu popup = new PopupMenu(mCtx,holder.buttonViewOption);
            //inflating menu from xml resource
            popup.inflate(R.menu.options_menu);
            //adding click listener
            popup.setonMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
                @Override
                public boolean onMenuItemClick(MenuItem item) {
                    switch (item.getItemId()) {
 case R.id.menu_document:
                            //handle menu2 click
                            DocFragment newfragment1 = new DocFragment();
                    
final Intent intent = ((Activity) mCtx).getIntent();
                            Bundle bundle = intent.getExtras();
                            if(bundle != null){
                                id = bundle.getString("id");
                            }


                            Toast.makeText(view.getContext(),id,Toast.LENGTH_LONG).show();
                            FragmentTransaction fragmentTransaction1 =((AppCompatActivity)mCtx).getSupportFragmentManager().beginTransaction();
                            fragmentTransaction1.replace(R.id.container_view1,newfragment1);
                            fragmentTransaction1.addToBackStack(null);
                            fragmentTransaction1.commit();
                            NavigationActivity.container_view1.setVisibility(View.VISIBLE);

                            break;
                    }
                    return false;
                }
            });
            //displaying the popup
            popup.show();

解决方法

有两种方法可以将数据从 Activity(或 Fragment 外部)传递到 Fragment:

1- 为片段设置参数

Bundle args = new Bundle();
args.setString("id",id);
newfragment1.setArguments(args);

2- 使用 newInstance 函数

在你的 DocFragment 中创建一个静态方法:

public static DocFragment newInstance(String id) {
    DocFragment docFragment = new DocFragment();
    Bundle args = new Bundle();
    args.putInt("id",id);
    docFragment.setArguments(args);
    return docFragment;
}

然后将片段的初始化更改为:

String id = bundle.getString("id"); //after retrieving from extras
DocFragment newfragment1 = DocFragment.newInctance(id);

将数据传递给片段后,您可以检索 frgament 的 onCreate 或 onCreateView 方法的参数:

 Bundle args = getArguments();
 int index = args.getString("id");

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。