我需要将一个String从一个Activity传递给一个片段,但似乎没有什么对我有用。
我在stackoverflow上找到了这个答案
从活动中您按意图发送数据:
Bundle bundle = new Bundle(); bundle.putString("edttext", "From
Activity"); // set Fragmentclass Arguments Fragmentclass fragobj = new
Fragmentclass(); fragobj.setArguments(bundle);
并在Fragment onCreateView方法中:
@Override public View onCreateView(LayoutInflater inflater, ViewGroup
container,
Bundle savedInstanceState) {
String strtext = getArguments().getString("edttext");
return inflater.inflate(R.layout.fragment, container, false); }
但这对我不起作用。当我点击按钮时没有任何反应。
是否因为片段已经创建了?在我的应用中:ToDoFragment>活动(将数据传递给:> ToDoFragment
这是我的代码,但我不会提供更多信息:
Activity.java (在按钮的OnClickListener中)
String datePassed = mDate.getText().toString();
String toDoPassed = mEditText.getText().toString();
Bundle bundle=new Bundle();
bundle.putString("key1", datePassed);
//set Fragmentclass Arguments
ToDoFragment myToDoFragment=new ToDoFragment();
myToDoFragment.setArguments(bundle);
ToDoFragment.java (在oncreateview内)
Bundle bundle = this.getArguments();
if (bundle != null) {
mToDoInfo = getActivity().getIntent().getStringExtra(key1);
答案 0 :(得分:0)
是的,这是因为片段已经创建。在片段类中创建一个方法,并从活动的open()
方法中调用它。
答案 1 :(得分:0)
让我轻松为您服务!
ToDoFragment myToDoFragment=new ToDoFragment(datePassed); //easy right?
并在你的ToDoFragment
类中创建一个以String作为输入的构造函数!
答案 2 :(得分:0)
如果我理解正确,那么你做错了,但是你在错误的场景中这样做了。这是假设您的片段已经膨胀&你正在从它开始新的活动&希望数据返回作为结果。所以你需要的是这样的东西,
在我认为你正在开展活动的ToDoFragment
内,请改为:
startActivityForResult(new Intent(getActivity(), MyActivity.class), 1001);
&安培;覆盖onActivityResult
方法,如:
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if(requestCode == 1001 && resultCode == Activity.RESULT_OK) {
String myData = data.getStringExtra("my_key");
}
}
&安培;现在点击你的MyActivity
,
Intent intent = new Intent();
intent.putExtra("my_key", "my_data");
setResult(RESULT_OK, intent);
finish();
这应该调用我们编写代码来获取数据的片段的onActivityResult
。
答案 3 :(得分:0)
您可以简单地按照此模式将值从活动传递到片段
<强> ToDoFragment.java 强>
public class ToDoFragment extends Fragment {
String date;
public static Fragment newInstance(String date) {
ToDoFragment fragment = new ToDoFragment();
fragment.date = date;
return ToDoFragment;
}
}
在活动
String toDoPassed = mEditText.getText().toString();
ToDoFragment myToDoFragment = ToDoFragment.newInstance(toDoPassed);