android - 使用 bundle 将 fragment 之间的数据传递给另一个 fragment 示例

标签 android android-fragments android-listfragment

我的应用程序中有 3 个 sherlockListFragments。每个 fragment 都有一些 editTexts,最后一个 fragment 有一个按钮,当按下该按钮时,应该访问和存储第一个和第二个 fragment 中的所有数据。 我使用 bundle 在 fragment 之间发送数据。使用以下简单示例, 这是我的第一个 fragment 的代码:

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);
}

} 这是接收文本的 fragment 代码:

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);
}

现在我在第三个 fragment 中有一个空值,我该怎么办? 提前致谢

最佳答案

您的代码失败是正常的。在第一个 fragment 中,您所做的就是创建一个新的 PersonalDataFragment 实例,并将包含数据的 Bundle 传递给它。问题是虽然 fragment 将数据保存在 Bundle 中,但 fragment 本身并不是应用程序使用的 fragment (甚至没有附加到 Activity)。您还在 PersonalDataFragment 实例上设置了 Bundle,但您尝试访问 WorkExpRefFragment 中的数据,这显然无法正常工作,因为这两个 fragment 不'有直接联系。

您想要做的事情的一个简单解决方案是让 Activity“保存”您的 fragment 的数据,因为 Activity 可用于所有 fragment 。首先在包含三个 fragment 的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
} 

然后你的 fragment 将像这样保存它们的数据:

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 fragment 中的数据:

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

根据您使用这些 fragment 的方式,此解决方案可能行不通。另外,请记住,您像上面那样传递的 Bundle 不会因配置更改而保留。

关于android - 使用 bundle 将 fragment 之间的数据传递给另一个 fragment 示例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16499385/

相关文章:

android - 膨胀 ListFragment 类时出错

android - 从 ListFragment 调用 DialogFragment 上的 setTitle()

android - 生成签名的APK时如何解决依赖关系

android - 为 BottomNavigationView 设置默认 menuItem

android - 获取 fragment 动态附加到 <FrameLayout>?

java - Android 错误 : type mismatch cannot convert from android. app.actionbar 到 android.support.v7.app.actionbar

java - 多个 Activity/fragment 的自定义对话框界面

java - 什么控制着 UI 屏幕上显示的 View 顺序?

android - 其他条件未被调用

java - 使用 ArrayList 填充 ListFragment