我想将字符串值从activity传递给fragment。为此,我使用bundle来传输字符串值。
投入活动 传递字符串值: -
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值。请帮我解决这个问题。提前谢谢。
答案 0 :(得分:10)
我建议您按照link1和this进行操作。你应该使用接口。查看here
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);
}
答案 1 :(得分:4)
假设您要将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);
答案 2 :(得分:0)
在片段中需要的对象活动中首先公开。
然后就可以像((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();
答案 3 :(得分:0)
第一次运行应用时,savedInstance变量将为空, 它只在调用onSaveInstanceState方法时被填充,这通常在您旋转屏幕时发生,然后将填充savedInstance变量。试试这个:
if(savedInstance != null){
Log.d(TAG, "There's is something");
}else{
Log.d(TAG, "Nothing in there");
}
首次在logcat中,您会看到第一条消息,尝试转动您的设备,其他消息将会显示。
正如@james所说,推荐的方法是使用接口,或者有一个字段类,但这会增加耦合并破坏片段的整个点。
答案 4 :(得分:0)
最简单的方法,但不推荐
您可以从片段访问活动数据:
的活动:
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;
}
}