今天我收到了以下错误:
无法实例化片段:确保类名存在,是公共的,并且具有公共的空构造函数
因为我的片段构造函数不是空的,所以我提交了一个适配器来显示我的ListFragment
中有关构造函数的一些数据。所以我必须编写一个函数来将适配器保存在一个包中,但我该如何处理呢?
public class AllMedicationsFragment extends ListFragment {
MyAdapter myAdapter;
public static final MyFragment newInstance(MyAdapter adapter) {
MyFragment myFragment = new MyFragment();
Bundle bdl = new Bundle(1);
bdl.put??(adapter);
myFragment.setArguments(bdl);
return myFragment;
}
自从我实现了TimePickerFragment
之后,我就收到了这个错误,在另一个Activity中调用。
答案 0 :(得分:3)
你不会。将适配器传递给片段有0个理由或意义。如果你认为你需要,你几乎肯定会搞砸你的架构。适配器绑定到视图,只有拥有该视图的片段才能访问它。
如果您正在尝试执行某些操作,例如在被杀死的情况下保存您的状态,那么正确的做法是保存您要映射到列表的数据或重新创建该数据所需的数据(如网址) (重新获取)并在重新启动时创建一个新的适配器。
答案 1 :(得分:1)
如果我理解正确的话,你会尝试将适配器管理的数据放入捆绑包中。
Parcelables就派上用场了。
您可以编写自定义适配器来管理Parcelables列表。类似的东西:
public class MyAdapter extends BaseAdapter{
private Parcelable[] mAdapterData;
public MyAdapter(Parcelable[] wrappedData){
mAdapterData = wrappedData;
}
public Parcelable[] dataAsParcelableArray(){
// create your array and return it.
}
}
然后执行以下操作:
Bundle bdl = new Bundle(1);
bdl.putParcelableArray("YOUR_KEY", adapter.dataAsParcelableArray());