在一个Fragment上,它以相同的方式获得其他值,Fragment获取null

时间:2016-06-09 23:39:19

标签: android json android-fragments

我使用 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;
}

1 个答案:

答案 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存在并且具有相同的内容。