Java 如何从一个片段到另一个片段获取捆绑数据?
我有两个片段。addfragment和controlfragment。从addfragment,我使用bundle和fragment事务发送数据,然后在control fragment中,我想使用bundle获取数据,但无法获取数据。所以请帮帮我 这是我的addfragment和fragment事务-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
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 );