活动中除一个片段外的所有片段均为空白

时间:2019-02-18 22:56:07

标签: android android-fragments

我试图用几个动态加载的部件来构建用户屏幕,所以我创建了一个活动,在设计视图中添加了一些其他静态内容和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)

具有相同的结果。

有人暗示我在做什么错吗?

谢谢,克里斯蒂安:)

1 个答案:

答案 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);