如何将捆绑数据从一个片段获取到另一个片段?
How to get bundle data from one fragment to another fragment?
我有两个 fragments.addfragment 和控制片段。从 addfragment 我使用带有片段事务的 bundle 发送数据,然后在控制片段中,我想使用 bundle 获取该数据但我无法获取数据。所以请帮助我
这是我的片段交易的addfragment-
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();
}
});
并且在控制片段中我以这种方式获取数据...但我无法获取数据
public class ControlFragment extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View rootView= inflater.inflate(R.layout.fragment_control, container, false);
Bundle bundle = getArguments();
String ip=bundle.getString("ip");
Stirng port = bundle.getString("port");
Stirng uname = bundle.getString("uname");
Stirng password = bundle.getString("password");
使用这条线
捆绑包=getArguments();
在膨胀你的 rootview 之前
在 oncreate.Always 中的 oncreate view 之前获取数据 在设置 data.Hope 之前做一个 null 检查错误 这对你有帮助
@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, new ControlFragment());
这行代码产生了一个问题,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,片段);
这是变化。
我有两个 fragments.addfragment 和控制片段。从 addfragment 我使用带有片段事务的 bundle 发送数据,然后在控制片段中,我想使用 bundle 获取该数据但我无法获取数据。所以请帮助我
这是我的片段交易的addfragment-
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();
}
});
并且在控制片段中我以这种方式获取数据...但我无法获取数据
public class ControlFragment extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View rootView= inflater.inflate(R.layout.fragment_control, container, false);
Bundle bundle = getArguments();
String ip=bundle.getString("ip");
Stirng port = bundle.getString("port");
Stirng uname = bundle.getString("uname");
Stirng password = bundle.getString("password");
使用这条线
捆绑包=getArguments();
在膨胀你的 rootview 之前
在 oncreate.Always 中的 oncreate view 之前获取数据 在设置 data.Hope 之前做一个 null 检查错误 这对你有帮助
@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, new ControlFragment());
这行代码产生了一个问题,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,片段);
这是变化。