我使用 JSON 文件来存储数据,我创建了ListFragment,它由Listviews填充,获取该数据。我需要将其提取或存储在 AddFragment , ViewFragment 中,并按UUID进行排序,它在 ViewFragment 上工作正常 AddFragment 在云值上获取null。任何想法我应该在哪里寻找问题或如何解决它?
ViewFragment: cloud = CloudLab.get(getActivity())。getCloud(dreamIds);返回正确的价值。
public class ViewFragment extends Fragment{
public static final String EXTRA_DREAMEE_ID = "com.example.tadas.dreamcload1.dream_id";
private Cloud cloud;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
UUID dreamIds = (UUID)getArguments().getSerializable(EXTRA_DREAMEE_ID);
cloud = CloudLab.get(getActivity()).getCloud(dreamIds);
}
@Override
public View onCreateView(LayoutInflater inflater,
ViewGroup parent, Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.fragment_view, parent, false);
return v;
}
public static ViewFragment newInstance(UUID dreamIds) {
Bundle args = new Bundle();
args.putSerializable(EXTRA_DREAMEE_ID, dreamIds);
ViewFragment fragment = new ViewFragment();
fragment.setArguments(args);
return fragment;
}
}
但是在 AddFragment dCloud = CloudLab.get(getActivity())。getCloud(dreamId);返回null。
public class AddFragment extends Fragment {
private static final String TAG = "CloadLab";
public static final String EXTRA_DREAM_ID = "com.example.tadas.dreamcload1.dream_id";
private Cloud dCloud;
@Override
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
UUID dreamId = (UUID)getArguments().getSerializable(EXTRA_DREAM_ID);
dCloud = CloudLab.get(getActivity()).getCloud(dreamId);
}
@Override
public View onCreateView(LayoutInflater inflater,
ViewGroup parent, Bundle savedInstanceState){
View v = inflater.inflate(R.layout.fragment_add,parent,false);
return v;
}
public static AddFragment newInstance(UUID dreamId) {
Bundle args = new Bundle();
args.putSerializable(EXTRA_DREAM_ID, dreamId);
AddFragment fragment = new AddFragment();
fragment.setArguments(args);
return fragment;
}
}
CloudLab类
public class CloudLab {
private static final String TAG = "CloudLab";
private static final String FILENAME = "dre.json";
private ArrayList<Cloud> mClouds;
private DreamCloudSerializer mSerializer;
private static CloudLab sCloudLab;
private Context mAppContext;
public CloudLab(Context appContext) {
mAppContext = appContext;
mSerializer = new DreamCloudSerializer(mAppContext, FILENAME);
try {
mClouds = mSerializer.loadDre();
}catch (Exception e) {
mClouds = new ArrayList<Cloud>();
Log.e(TAG, "Error loading: ", e);
}
}
public static CloudLab get(Context c) {
if (sCloudLab == null) {
sCloudLab = new CloudLab(c.getApplicationContext());
}
return sCloudLab;
}
public void addDre(Cloud c) {
mClouds.add(c);
}
public void deleteDre(Cloud c) {
mClouds.remove(c);
}
public boolean saveDre() {
try {
mSerializer.saveDre(mClouds);
Log.d(TAG, "saved to file");
return true;
} catch (Exception e) {
Log.e(TAG, "Error saving: ", e);
return false;
}
}
public ArrayList<Cloud> getClouds() {
return mClouds;
}
public Cloud getCloud(UUID id) {
for (Cloud c : mClouds) {
if (c.getId().equals(id))
return c;
}
return null;
}
答案 0 :(得分:0)
你的碎片不完全一样。你有不同的梦想ID,并期待相同的结果。
// your id in ViewFragment
public static final String EXTRA_DREAMEE_ID = "com.example.tadas.dreamcload1.dream_ids";
// your id in AddFragment
public static final String EXTRA_DREAM_ID = "com.example.tadas.dreamcload1.dream_id";
// strings for your dream id in each fragment is different
两个字符串都不同。如果您期望相同的结果,请传递相同的ID。或者在传递时确保这两个ID存在并且具有相同的内容。