我找到了这段代码来将数据从一个片段传递到另一个片段:
片段1:
FragmentManager fragmentManager = getFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
Fragment2 fragment2 = new Fragment2();
Bundle bundle = new Bundle();
bundle.putString("data", data);
fragmentTransaction.replace(R.id.fragment_container, fragment2);
fragmentTransaction.addToBackStack(null);
fragmentTransaction.commit();
片段2:
Bundle bundle = getArguments();
assert bundle != null;
String data = bundle.getString("data");
但我不想改变片段。所以我拆了一部分。但这不起作用。这里是我的代码:
片段1:
public void openActifity2(){
Fragment_score fragment_score = new Fragment_score();
Bundle bundle = new Bundle();
bundle.putInt("FINISHED_LEVELS", finishedLevels);
bundle.putInt("FAILED_LEVELS", failedLevels);
bundle.putInt("SKIPPED_LEVELS", skippedLevels);
bundle.putInt("USED_HINTS", usedHints);
fragment_score.setArguments(bundle);
}
片段2:
Bundle bundle = getArguments();
int finishedLevels = bundle.getInt("FINISHED_LEVELS");
int failedLevels = bundle.getInt("FINISHED_LEVELS");
int skippedLevels = bundle.getInt("FINISHED_LEVELS");
int usedHints = bundle.getInt("FINISHED_LEVELS");
我必须使用我在网上找到的代码还是我的版本也能工作?当我打开第二个片段时会出现这个错误:
E/AndroidRuntime:致命异常:主进程:com.example.rexan_snerficonquiz.fragment_score.onCreateView(fragment_score.:26)在AndroidX.fragment.app.fragmentManagerimpl.moveTostate(fragmentManagerimpl.Java:881)在AndroidX.fragment.app.fragmentManagerimpl.moveF处调用虚拟方法“int android.os.bundle.getInt(Java.lang.string)”nsAndExecute(FragmentManagerImpl.java:1824)在AndroidX.Fragment.App.FragmentManagerImpl.ExecpendingActions(FragmentManagerImpl.java:1727)在AndroidX.Fragment.App.FragmentManagerImpl.ExecpendingActions(FragmentManagerImpl.java:1727)在AndroidX.Fragment.App.FragmentManagerImpl.ExecpendingActions(FragmentManagerImpl.java:1727)在AndroidX.Fragment.App.FragmentManagerImpll$2。
如果您更改了这些片段,那么您的代码就会正常工作。但是,如果您不想更改片段1)int finishedLevels=bundle.getint(“finished_levels”,0);
或2)而不是bundle,请在片段1中使用静态全局变量public static int finishedLevels=0;
,然后使用类名引用在片段2中获取它们的值。注意:如果您不想更改片段,并且希望在片段2中获得值,那么我建议使用静态变量
为了避免错误,请尝试以下操作
Bundle bundle = getArguments();
if(bundle != null){
int finishedLevels = bundle.getInt("FINISHED_LEVELS", "DEFAULT_VALUE");
int failedLevels = bundle.getInt("FINISHED_LEVELS", "DEFAULT_VALUE");
int skippedLevels = bundle.getInt("FINISHED_LEVELS", "DEFAULT_VALUE");
int usedHints = bundle.getInt("FINISHED_LEVELS", "DEFAULT_VALUE");
}
根据您的注释,您可以更改OnOptionSitemSelected
方法中的片段
@Override
public boolean onOptionsItemSelected(MenuItem item) {
int id = item.getItemId();
if (id == R.id.action_1) {
// add your action here that you want
return true;
}else if (id==R.id.action_2) {
// add your action here that you want
return true;
}
return super.onOptionsItemSelected(item);
}
这是我完整的logcat: 在Android.support.v4.app.backStackRecord.doaddop(backStackRecord.java:414)在Android.support.v4.app.backStackRecord.replace(backStackRecord.java:449)在Android.support.v4.app.backStackRecord.
编辑问题以包括所需的行为、特定的问题或错误,以及重现问题所需的最短代码。这将帮助其他人回答这个问题。 嗨,我知道这个问题有答案。我已经尝试了所有它们,但在我的应用程序中不起作用。我有两个片段(登录和密码),我想将电子邮件和手机号码从登录片段传递到密码片段。我尝试了很多,但我无法得到解决方案。 请任何人帮助我。 登录片段: 密码碎片:
在FragmentOne.class扩展android.support.v4.app.
我有两个活动,在活动1中有碎片,在活动2中有碎片 fragment1和fragment2扩展自FragmentActivity1,activity2扩展自AppCompatActivity 我想将字符串值从fragment1发送到fragment2,而不获取空值。我希望你能理解这个问题。谢谢
我在一个片段中有一个复选框列表(我们称之为FragmentA),我有一个包含两个片段(FragmentB和C)的活动。如果选中一个复选框,我想在片段C中显示一条消息,说明选中了特定的复选框。我需要帮助,因为我不知道如何将(isChecked)从片段A传递到片段C。 FragmentA.java 分数不影响碎片C。 包含片段 B 和 C 的活动 片段C 活动
我知道的一种方法是通过活动。我们可以将数据从一个片段发送到另一个活动,再从一个活动发送到另一个片段。还有其他方法吗?