我试图用几个动态加载的部件来构建用户屏幕,所以我创建了一个活动,在设计视图中添加了一些其他静态内容和5个片段。对于每个片段,我创建了一个新的活动,如下所示:
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
public class fragmentX extends Fragment {
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view= inflater.inflate(R.layout.activity_registration_picker_fragment, container, false);
return view;
}
}
第一个片段始终可见,并且可以正常工作。在那里,我有一个webview,没有任何问题。
以下我有4个复选框,例如如果用户单击checkbox1,将显示fragment2。我可以使用
显示或隐藏片段FragmentManager fm = getSupportFragmentManager();
Fragment fr = fm.findFragmentById(R.id.fragmentX);
FragmentTransaction ft = fm.beginTransaction();
ft.show(fr); // or ft.hide(fr);
ft.commit();
不幸的是,片段2-5的内容不可见,那里只有一个很大的空白。
我还尝试将frameLayouts创建为占位符,并使用
动态添加片段fr.add(R.id.myPlaceholderX,new fragmentX)
具有相同的结果。
有人暗示我在做什么错吗?
谢谢,克里斯蒂安:)
答案 0 :(得分:0)
我有另一种对我有用的解决方案。我决定不使用片段,而是将所有代码包含在一个活动中。我在那里为每个要隐藏的零件创建了LinearLayout。每个LL都是不可见的,但高度为0,否则仍将分配空间。
当有人激活我运行的复选框时
findViewById(R.id.myLinearLayout).setVisibility(View.VISIBLE);
LinearLayout llt = (LinearLayout)findViewById(R.id.myLinearLayout);
llt.setLayoutParams(new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT));
如果有人取消选中我要执行的复选框,
findViewById(R.id.myLinearLayout).setVisibility(View.INVISIBLE);
ViewGroup.LayoutParams lp = llt.getLayoutParams();
lp.height = 0;
llt.setLayoutParams(lp);