如何解决我可以在没有 xml 的情况下将片段动态添加到后台堆栈中吗?
我有 2 个片段,一个是我在主活动中初始化的主片段,另一个是我想在第一个片段上单击按钮时实例化的片段。我在添加片段 2 时遇到问题,但我可以毫无问题地替换。我得到的错误是我在网上多次以不同方式询问过的错误,但我找不到一种解决方案来动态/以编程方式从第一个片段中专门实例化第二个片段。
在我的活动中:
public void showFragment_1(){
this.rl = new FrameLayout(this);
this.rl.setLayoutParams(new FrameLayout.LayoutParams((int)Globals.screen_width,(int)(Globals.screen_height)));
this.rl.setId((int)133);
mainFragment = new MainFragment(rl);
setContentView(rl);
FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
displayMetrics displayMetrics = new displayMetrics();
getwindow().getwindowManager().getDefaultdisplay().getMetrics(displayMetrics);
Globals.screen_height = displayMetrics.heightPixels;
Globals.screen_width = displayMetrics.widthPixels;
rl.setY(displayMetrics.heightPixels * 0.08f);
rl.setElevation(5.1f);
ft.add(rl.getId(),mainFragment,"MainFragment");
ft.addToBackStack("MainFragment");
ft.commitAllowingStateLoss();
}
在片段 1 中:
private View.OnClickListener displayNewFragment = new View.OnClickListener() {
@Override
public void onClick(View v) {
int i = 0;
int id = 0;
for (Fragment frag : Globals.frag_mgr.getFragments()){
if (frag.getTag() == "MainFragment"){
FrameLayout fragment_container = new FrameLayout(context);
fragment_container.setLayoutParams(new FrameLayout.LayoutParams((int)Globals.screen_width,(int)(Globals.screen_height)));
fragment_container.setId((int)2020);
switch (v.getId()){
// Test for add - not working
case 0:
LinearLayout ll = new LinearLayout(context);
ll.setorientation(LinearLayout.HORIZONTAL);
ll.setId((int)12345);
NewFragment newFragment = new NewFragment(frameLayout);
getChildFragmentManager().beginTransaction().add(frag_container.getId(),newFragment).addToBackStack(null).commit();
break;
// Test for replace working,but the view is changing fragment 1
case 1:
NewFragment newFragment = new NewFragment(fragment_container);
getActivity().getSupportFragmentManager().beginTransaction().replace(fragment1.getId(),newFragment).addToBackStack(null).commit();
break;
}
}
i+=1;
}
}
};
注意:我会在需要的情况下共享我的 xml,但如果可能的话,我宁愿不这样做。我更喜欢动态工作。
fragment1 的 xml:
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainFragment" />
片段 2 的 xml:
<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/frag_new"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".NewFragment">
<!-- Todo: Update blank fragment layout -->
<FrameLayout
android:id="@id/frag_container"
android:layout_width="match_parent"
android:layout_height="match_parent" />
<TextView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:text="@string/hello_blank_fragment" />
</FrameLayout>
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。