Android Studio中使用Fragment动态添加按钮不显示问题求助
问题原因
- 动态创建的
LinearLayout和Button没有被添加到Fragment加载的布局树中,不会触发渲染所以看不到 - 循环中刚创建完动态Button就将变量重新赋值为XML中固定的
characterNameBtn,动态创建的按钮实例直接被丢弃,所有循环的点击事件最终都绑定到了同一个XML自带的按钮上,所以点击只会提示最后一次循环的id=20 - XML中
list_character_name布局未设置方向,默认是水平排列,如果后续往这个布局加多个控件会横向堆叠超出屏幕
修复代码
listCharacter.java 中 onCreateView 方法修改后内容:
@Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate(R.layout.fragment_list_character, container, false); context = view.getContext(); // 取根布局作为动态按钮的容器,根布局已设置垂直方向,按钮会依次向下排列 LinearLayout rootContainer = view.findViewById(R.id.frameLayout); for (int i = 1; i <= 20; i++) { LinearLayout.LayoutParams btnParams = new LinearLayout.LayoutParams( LinearLayout.LayoutParams.MATCH_PARENT, 70 // 可以和XML里的按钮高度保持一致,也可以用WRAP_CONTENT ); // 按需设置按钮边距 btnParams.setMargins(0,0,0,10); Button dynamicBtn = new Button(context); dynamicBtn.setId(i); final int btnId = dynamicBtn.getId(); dynamicBtn.setText("button " + btnId); // 复用XML里按钮的样式配置,保持视觉一致 dynamicBtn.setBackgroundColor(Color.parseColor("#66000000")); dynamicBtn.setTextColor(Color.WHITE); dynamicBtn.setTextSize(TypedValue.COMPLEX_UNIT_SP, 40); dynamicBtn.setGravity(Gravity.CENTER); dynamicBtn.setPadding(5,5,5,5); dynamicBtn.setOnClickListener(v -> { Toast.makeText(v.getContext(), "Button clicked index = " + btnId, Toast.LENGTH_SHORT).show(); Navigation.findNavController(v).navigate(R.id.action_listCharacter_to_loadCharacter); }); // 把动态创建的按钮加到容器布局里,必须加这步才能显示 rootContainer.addView(dynamicBtn, btnParams); } return view; }
如果需要保留XML中原本的characterNameBtn,不需要做额外修改,动态按钮会自动排在它的下方。
内容的提问来源于stack exchange,提问作者BergströmOscar
相关产品推荐
相关产品推荐

