android 使用束在片段与另一片段之间传递数据示例

j0pj023g  于 2023-03-16  发布在  Android
关注(0)|答案(2)|浏览(126)

我有3 sherlockListFragments在我的应用程序。每个片段都有一些editText和最后一个片段有一个按钮,当它按下时,第一个和第二个片段中的所有数据都应该被访问和存储。我使用捆绑发送片段之间的数据。与下面的简单示例,这是我的第一个片段的代码:

public class PersonalDataFragment extends SherlockListFragment {

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

    View v = inflater.inflate(R.layout.fragmet_personal_data, container, false);

    return v;
}

@Override
public void onCreate(Bundle savedInstanceState) {
    PersonalDataFragment fragment = new PersonalDataFragment();
    Bundle bundle = new Bundle();
    bundle.putString("y", "koko"); //any string to be sent
    fragment.setArguments(bundle);

    super.onCreate(savedInstanceState);
}

},这是接收文本的片段的代码:

public class WorkExpRefFragment extends SherlockListFragment  {
String myInt;

@Override
public View onCreateView(final LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.fragment_workexp_ref, container, false);

    final EditText t = (EditText) view.findViewById(R.id.editText5);
    final Button generate = (Button)view.findViewById(R.id.button2);

    generate.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub

            t.setText(myInt + "sadfigha");
        }
    });
    return view;
}

@Override
public void onCreate(Bundle savedInstanceState) {
    Bundle bundle = this.getArguments();
    if(getArguments()!=null) {
        myInt = getArguments().getString("y");
    }

    super.onCreate(savedInstanceState);
}

}
现在我在第三个片段中有一个空值,我该怎么办?

g6ll5ycj

g6ll5ycj1#

你的代码失败是很正常的,在第一个片段中,你所做的就是创建一个PersonalDataFragment的新示例,并将数据传递给它一个Bundle,问题是尽管 fragment 保存了Bundle中的数据,片段本身不是应用程序使用的片段(甚至没有连接到Activity)。您还在PersonalDataFragment示例上设置了Bundle,但您尝试访问WorkExpRefFragment中的数据,这显然不起作用,因为两个片段不起作用。我们没有直接的联系。
一个简单的解决方案是让Activity“保存”片段的数据,因为Activity对所有片段都可用。首先在Activity中创建两个方法来保存三个片段:

public void saveData(int id, Bundle data) {
    // based on the id you'll know which fragment is trying to save data(see below)
    // the Bundle will hold the data
}

public Bundle getSavedData() {
    // here you'll save the data previously retrieved from the fragments and
    // return it in a Bundle
}

然后片段将按如下方式保存其数据:

public class PersonalDataFragment extends SherlockListFragment {

   // this will identify the PersonalDataFragment fragment when trying to save data 
   public void static int id PERSONAL_ID = 1; 
   //...

   @Override
   public void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      Bundle bundle = new Bundle();
      bundle.putString("y", "koko"); //any string to be sent
      YourActivity activity = (YourActivity) getActivity();
      activity.saveData(PERSONAL_ID, bundle);
   }    
}

检索WorkExpRefFragment片段中的数据:

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    YourActivity activity = (YourActivity) getActivity();
    Bundle savedData = activity.getSavedData();
}

根据您使用这些片段的方式,此解决方案可能无法工作。此外,请记住,您像上面这样传递的Bundle将不会保留用于配置更改。

b5buobof

b5buobof2#

我也遇到过类似的情况

Fragment Result API解决了我的问题。
查看文档使用片段结果API获取结果

相关问题