从活动传递后,片段中没有数据返回?

时间:2018-01-17 12:32:39

标签: java android android-fragments

我正在尝试将数据从活动传递到片段。我有这个activityA使用片段作为布局。

现在,当我尝试将数据从活动传递到片段时,我一直变为空。我甚至调试过,发现savedInstanceState Bundle为空。我真的不知道我做错了什么。

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        String s = getIntent().getStringExtra("message");
        Bundle bundle = new Bundle();
        bundle.putString("params", s);
        // set MyFragment Arguments
        Camera2BasicFragment myObj = new Camera2BasicFragment();
        myObj.setArguments(bundle);


        setContentView(R.layout.activity_camera);
        if (null == savedInstanceState) {
            getFragmentManager().beginTransaction()
                    .replace(R.id.container, Camera2BasicFragment.newInstance())
                    .commit();


        }
    }


    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        if (getArguments() != null) {
            String s  = getArguments().getString("params");
        }
    }

3 个答案:

答案 0 :(得分:2)

您在执行交易时创建了新实例。只需使用相同的实例进行交易。这样做。

  Camera2BasicFragment myObj = new Camera2BasicFragment();
    myObj.setArguments(bundle);
 getFragmentManager().beginTransaction()
                .replace(R.id.container, myObj)
                .commit();

如果你使用单例模式进行片段,那么你必须获取一次实例并将包数据设置为它。

 Camera2BasicFragment myObj = Camera2BasicFragment.newInstance();
    myObj.setArguments(bundle);
 getFragmentManager().beginTransaction()
                .replace(R.id.container, myObj)
                .commit();

答案 1 :(得分:0)

您正在使用 Camera2BasicFragment 类的2个对象。你要设置参数的地方 1)

Camera2BasicFragment myObj = new Camera2BasicFragment();
myObj.setArguments(bundle);

和 2)

Camera2BasicFragment.newInstance()
替换片段时

仅使用Camera2BasicFragment类的一个实例。

答案 2 :(得分:0)

在片段中尝试此代码

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    Bundle bundle = getArguments();
    if(bundle!=null)
    {
        String s = bundle.getString("params");
    }
}