android通过包将数据从片段传递到适配器
Im使用cardview显示数据,并在cardview上显示menuItem。单击菜单项后,我将打开一个新片段,并希望传递id(来自相应的卡)。我试着使用互联网上提到的不同方式,但我错了。下面是我用来将数据从片段发送到适配器的代码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
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来确定参数是否真的通过了?自从应用程序崩溃后,我改变了方法。但是谢谢你