以编程方式创建片段和设置参数

时间:2016-01-24 08:54:42

标签: android layout params layoutparams fragmentmanager

我在代码中创建片段时出现以下问题,这是正常的 我的问题是当我尝试设置他和参数时 这是我的代码。

LinearLayout.LayoutParams params = new LinearLayout.LayoutParams(
        0, ViewGroup.LayoutParams.WRAP_CONTENT);
params.weight = 1.0f;

FragmentManager fragmentManager = getFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
FragmentImageList myFragment = new FragmentImageList();

fragmentTransaction.add(631, myFragment, "fragmentTag");
fragmentTransaction.addToBackStack(null);
fragmentTransaction.commit();

myFragment.getView().setLayoutParams(params);

然后在控制台中出现以下错误。

Attempt to invoke virtual method 'void android.view.View.setLayoutParams(android.view.ViewGroup$LayoutParams)' on a null object reference

其中有意义因为尚未创建Fragment的视图。 但如何设置" Params"创建片段。

3 个答案:

答案 0 :(得分:1)

你要传递的是

631:

  fragmentTransaction.add(631, myFragment, "fragmentTag");  

应该是您要添加片段的视图ID。 确保631是该视图的id,否则传递为R.id.yourViewId

答案 1 :(得分:0)

谢谢你的答案,我觉得很愚蠢 我的目标是用Fragment创建一个网格 但这个带参数的整个方案完全没必要。

@Hitesh Sahu,再次感谢你。
你答案的一部分是关键。

  

片段就像占位符一样,它们会自动填充它们   容器视图(例如FrameLyout),您不需要分配它们   手动宽度和高度。


只需创建另一个res / layout文件即可在片段中使用它 仅适用于此网格:)

答案 2 :(得分:-1)

我不知道你的要求是什么,但我认为你应该膨胀视图而不是片段。

碎片就像占位符一样,它们会自动填充其容器视图(例如FrameLyout),您无需手动分配其宽度和高度。但是如果你仍然想这样做,你应该在你的片段类

中的onCreate View中进行
    @Override
        public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
            rootView = inflater.inflate(R.layout.home_fragment, container, false);

 // assign new layout params on rootView here

------------------------------------------ OR ---- -------------------------------------------------- ------------

使用layout inflater执行相同的操作

       //Use Layout inflater
        LayoutInflater inflater = (LayoutInflater) context
                        .getSystemService(Context.LAYOUT_INFLATER_SERVICE);

        //Load layout xml of child layout you want to add
        View childView= inflater.inflate(R.layout.viewpager_place_holder, null);


        //Get and Assign values on views of child view
       ((TextView) childView.findViewById(R.id.pager_title))
                            .setText("Test");

       // Set width and margin on child layout
       LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(
                        LinearLayout.LayoutParams.MATCH_PARENT,
                        LinearLayout.LayoutParams.WRAP_CONTENT);

        layoutParams.setMargins(
                            UtilFunctions.getUtilFunctions().dpToPixels(5,
                                    context.getResources()),
                            UtilFunctions.getUtilFunctions().dpToPixels(5,
                                    context.getResources()),
                            UtilFunctions.getUtilFunctions().dpToPixels(5,
                                    context.getResources()),
                            UtilFunctions.getUtilFunctions().dpToPixels(5,
                                    context.getResources()));

      //Add child to the root layout
      rootLayout.addView(childView, layoutParams);