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

android通过包将数据从片段传递到适配器,android,android-intent,fragment,bundle,adapter,Android,Android Intent,Fragment,Bundle,Adapter,Im使用cardview显示数据,并在cardview上显示menuItem。单击菜单项后,我将打开一个新片段,并希望传递id(来自相应的卡)。我试着使用互联网上提到的不同方式,但我错了。下面是我用来将数据从片段发送到适配器的代码 id = pobj.getString("id"); Intent intent = new Intent(getActivity(), CustomAdapter.class); intent.putExtra("id&qu

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

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

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();
公共类CustomAdapter扩展了RecyclerView.Adapter{ 上下文mCtx; 私人名单名称; 视图; 共享参考偏好; 字符串id; 公共CustomAdapter(视图、列表名称、上下文mCtx){ this.names=名称; this.mCtx=mCtx; this.view=视图; } @凌驾 public ViewHolder onCreateViewHolder(视图组父级,int-viewType){ 视图v=LayoutInflater.from(parent.getContext()) .充气(R.layout.list_项目,父项,假); 返回新的视图持有者(v); } 公共无效筛选器列表(列出筛选器名称){ this.names=filterdNames; notifyDataSetChanged(); } @凌驾 public void onBindViewHolder(最终CustomAdapter.ViewHolder,最终int位置){ Mylist Mylist=names.get(位置); holder.year.setText(mylist.getPurchase_year()); holder.areatype.setText(mylist.getProperty_type()); holder.area.setText(mylist.getSize()); holder.buttonViewOption.setOnClickListener(新视图.OnClickListener(){ @凌驾 公共void onClick(最终视图){ //将在此处显示弹出菜单 //创建弹出菜单 PopupMenu popup=新的PopupMenu(mCtx,保持器按钮查看选项); //从xml资源中展开菜单 弹出。充气(右菜单。选项菜单); //添加单击侦听器 setOnMenuItemClickListener(新的PopupMenu.OnMenuItemClickListener(){ @凌驾 公共布尔onMenuItemClick(菜单项){ 开关(item.getItemId()){ 案例R.id.menu\U文件: //句柄菜单2单击 DocFragment newfragment1=新DocFragment(); 最终意图=((活动)mCtx).getIntent(); Bundle=intent.getExtras(); if(bundle!=null){ id=bundle.getString(“id”); } Toast.makeText(view.getContext(),id,Toast.LENGTH_LONG.show(); FragmentTransaction FragmentTransaction 1=((AppCompatActivity)mCtx).getSupportFragmentManager().beginTransaction(); fragmentTransaction1.替换(R.id.container_view1,newfragment1); fragmentTransaction1.addToBackStack(空); fragmentTransaction1.commit(); NavigationActivity.container_view1.setVisibility(View.VISIBLE); 打破 } 返回false; } }); //显示弹出窗口 popup.show();
有两种方法可以将数据从活动(或片段外部)传递到片段:

public static DocFragment newInstance(String id) {
    DocFragment docFragment = new DocFragment();
    Bundle args = new Bundle();
    args.putInt("id", id);
    docFragment.setArguments(args);
    return docFragment;
}
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");

我更新了上面的代码,但仍然没有得到ID。你如何在片段中检索数据,你是否使用logcat来确定参数是否真的通过了?自从应用程序崩溃后,我改变了方法。但是谢谢你