在Android中将活动中的字符串值发送到片段

时间:2017-09-17 12:56:12

标签: java android android-fragments

我需要将一个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);

4 个答案:

答案 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);