[英]how to pass string data from activity to fragment?
我想将字符串值从活动传递到片段。 为此,我使用包来传输字符串值。
PUT STRING ACTIVITY传递字符串值:-
Bundle bundle = new Bundle();
bundle.putString("Value", resultp.get(CurrentProjectActivity.VALUE));
Log.d(TAG, "Value ::: " + resultp.get(CurrentProjectActivity.VALUE));
// set Fragmentclass Arguments
AmenetiesFragment fragobj = new AmenetiesFragment();
fragobj.setArguments(bundle);
在日志中,我也获得了“值”值。
获取片段中的字符串值(不起作用)。
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.activity_listview, container, false);
Bundle bundle = this.getArguments();
Log.d(TAG, "Value's value:) ::: " + bundle);
String strtext = bundle.getString("Value");
return rootView;
}
在日志中,我得到BUNDLE的NULL值。 请帮助我解决此问题。 提前致谢。
我建议您遵循此link1和this 。 您应该使用界面。 在这里检查
Bundle bundle = new Bundle();
bundle.putString("edttext", "From Activity");
// set Fragmentclass Arguments
Fragmentclass fragobj = new Fragmentclass();
fragobj.setArguments(bundle);
在Frament任务中
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
String strtext = getArguments().getString("edttext");
return inflater.inflate(R.layout.fragment, container, false);
}
假设您要将String数据从Activity发送到Fragment
在Fragment.java文件中添加以下代码,
public static String name= null;
public void setName(String string){
name = string;
}
在您要从其中发送String的MainActivity.java中,添加以下代码,
String stringYouWantToSend;
Fragment fragment = new Fragment();
fragment.setName(stringYouWantToSend);
在活动中首先公开您需要片段的对象。 那么您可以使用((ACtivityName)getActivity()).objectName;
我希望它有帮助。这不是将数据传递到片段的最佳方法。
还有其他方法。 创建片段类的构造函数并将其传递并保存在片段中,例如:
public MyFragment(String data){
this.data = data;
}
您也可以将其用作捆绑包@james答案。
编辑:-
第一路
private class MyFeagment extends Fragment {
private String data;
private Object myObject;
public MyFeagment(String data, Object anyObject) {
this.data = data;
this.myObject = myObject;
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
Log.i("My Fragment", "data :: " + data + " and myObject :"
+ myObject);
return super.onCreateView(inflater, container, savedInstanceState);
}
}
假设这是您的framgnet。 并将此代码放入您的活动中
FragmentManager manager = getSupportFragmentManager();
FragmentTransaction transaction = manager.beginTransaction();
transaction.add(R.id.fragment_container, new MyFeagment("My Data",
"data"));
transaction.commit();
第一次运行应用程序时,savedInstance变量将为空,仅当调用onSaveInstanceState方法时才会填充它,这通常在旋转屏幕时发生,然后将填充saveInstance变量。 尝试这个 :
if(savedInstance != null){
Log.d(TAG, "There's is something");
}else{
Log.d(TAG, "Nothing in there");
}
第一次登录logcat时,您会看到第一条消息,请尝试转动设备,否则其他消息将显示。
正如@james所说,推荐的方法是使用接口,或者使用字段类,但这会增加耦合并破坏整个片段。
最简单的方法,但不推荐
您可以从片段访问活动数据:
活动:
public class MyActivity extends Activity {
private String myString = "hello";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_my);
...
}
public String getMyData() {
return myString;
}
}
分段:
public class MyFragment extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
MyActivity activity = (MyActivity) getActivity();
String myDataFromActivity = activity.getMyData();
return view;
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.