我在代码中创建片段时出现以下问题,这是正常的 我的问题是当我尝试设置他和参数时 这是我的代码。
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"创建片段。
答案 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);