Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/304.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何从一个片段到另一个片段获取捆绑数据?_Java_Android_Android Fragments_Bundle - Fatal编程技术网

Java 如何从一个片段到另一个片段获取捆绑数据?

Java 如何从一个片段到另一个片段获取捆绑数据?,java,android,android-fragments,bundle,Java,Android,Android Fragments,Bundle,我有两个片段。addfragment和controlfragment。从addfragment,我使用bundle和fragment事务发送数据,然后在control fragment中,我想使用bundle获取数据,但无法获取数据。所以请帮帮我 这是我的addfragment和fragment事务- relaylist.setAdapter(adapter); relaylist.setOnItemClickListener(new AdapterView.OnItemClickLi

我有两个片段。addfragment和controlfragment。从addfragment,我使用bundle和fragment事务发送数据,然后在control fragment中,我想使用bundle获取数据,但无法获取数据。所以请帮帮我

这是我的addfragment和fragment事务-

     relaylist.setAdapter(adapter);
relaylist.setOnItemClickListener(new AdapterView.OnItemClickListener() {
    @Override
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {


        HashMap<String, String> o = (HashMap<String, String>) relaylist.getItemAtPosition(position);



        Log.e("ip: ", "> " +  o.get("ip"));
        Log.e("port: ", "> " +  o.get("port"));
        Log.e("uname: ", "> " +  o.get("uname"));
        Log.e("password: ", "> " +  o.get("password"));


        ControlFragment fragment = new ControlFragment();
        FragmentTransaction transaction = getFragmentManager().beginTransaction();
        Bundle bundle = new Bundle();
        bundle.putString("ip", o.get("ip"));
        bundle.putString("port", o.get("port"));
        bundle.putString("uname", o.get("uname"));
        bundle.putString("password", o.get("password"));
        Log.e("ip: ", "> " +  o.get("ip"));
        Log.e("port: ", "> " +  o.get("port"));
        Log.e("uname: ", "> " +  o.get("uname"));
        Log.e("password: ", "> " +  o.get("password"));
        fragment.setArguments(bundle);
        transaction.replace(R.id.mainFrame, new ControlFragment() );

        transaction.commit();
    }
});
用这条线

Bundle=getArguments()


在为rootview充气之前,请在oncreate中的oncreate视图之前提取数据。在设置数据之前,请始终执行空检查错误。希望这对您有所帮助

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    Bundle bundle = getArguments();
    if (bundle != null) {
        String ip = bundle.getString("ip");
        String port = bundle.getString("port");
        String uname = bundle.getString("uname");
        String password = bundle.getString("password");
    }
}
编辑

正如Amrish Kakadiya指出的

transaction.replace(R.id.mainFrame,newcontrolfragment())


这行代码产生了一个问题,new ControlFragment()创建了该片段的一个全新实例,因此在检索时将getArguments()设置为null。

您正在设置构造函数而不是对象。使用下面的代码

ControlFragment fragment = new ControlFragment();
        FragmentTransaction transaction = getFragmentManager().beginTransaction();
        Bundle bundle = new Bundle();
        bundle.putString("ip", o.get("ip"));
        bundle.putString("port", o.get("port"));
        bundle.putString("uname", o.get("uname"));
        bundle.putString("password", o.get("password"));
        Log.e("ip: ", "> " +  o.get("ip"));
        Log.e("port: ", "> " +  o.get("port"));
        Log.e("uname: ", "> " +  o.get("uname"));
        Log.e("password: ", "> " +  o.get("password"));
        fragment.setArguments(bundle);
        transaction.replace(R.id.mainFrame, fragment  );
transaction.replace(R.id.mainFrame,fragment)


这就是改变。

你得到了什么?你调试了吗?我得到了这样的错误。。。java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法“java.lang.String android.os.Bundle.getString(java.lang.String)”,可能重复
ControlFragment fragment = new ControlFragment();
        FragmentTransaction transaction = getFragmentManager().beginTransaction();
        Bundle bundle = new Bundle();
        bundle.putString("ip", o.get("ip"));
        bundle.putString("port", o.get("port"));
        bundle.putString("uname", o.get("uname"));
        bundle.putString("password", o.get("password"));
        Log.e("ip: ", "> " +  o.get("ip"));
        Log.e("port: ", "> " +  o.get("port"));
        Log.e("uname: ", "> " +  o.get("uname"));
        Log.e("password: ", "> " +  o.get("password"));
        fragment.setArguments(bundle);
        transaction.replace(R.id.mainFrame, fragment  );