Java 在片段中动态添加按钮
你好,我正在尝试添加一个按钮,但我一直收到以下错误:Java 在片段中动态添加按钮,java,android,android-fragments,Java,Android,Android Fragments,你好,我正在尝试添加一个按钮,但我一直收到以下错误: java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法“void android.widget.LinearLayout.addView(android.view.view,android.view.ViewGroup$LayoutParams) 这是我的代码,它在常规活动中运行良好,而不是作为片段工作: @Override public View onCreateView(LayoutInflater
java.lang.NullPointerException:尝试在空对象引用上调用虚拟方法“void android.widget.LinearLayout.addView(android.view.view,android.view.ViewGroup$LayoutParams)
这是我的代码,它在常规活动中运行良好,而不是作为片段工作:
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.fav, container, false);
lSecond = (LinearLayout) v.findViewById(R.id.lSecond);
lThird = (LinearLayout) v.findViewById(R.id.lThird);
return v;
}
public void bCreate(String i)
{
LinearLayout.LayoutParams btnParams = new LinearLayout.LayoutParams(matchParent, wrapContent);
Button btnNew = new Button(this.getActivity());
btnNew.setBackgroundResource(R.drawable.button);
btnNew.setTextColor(Color.parseColor("#ffffff"));
btnNew.setText(i);
scale = getResources().getDisplayMetrics().density;
int top = (int) (5 * scale + 0.5f);
int bot = (int) (5 * scale + 0.5f);
if (Second < Third)
{
int left = (int) (10 * scale + 0.5f);
int right = (int) (5 * scale + 0.5f);
btnParams.leftMargin = left;
btnParams.rightMargin = right;
btnParams.topMargin = top;
btnParams.bottomMargin = bot;
lSecond.addView(btnNew, btnParams);
Second++;
btnNew.setOnClickListener(listen);
}
@覆盖
CreateView上的公共视图(布局、充气机、视图组容器、捆绑包保存状态){
视图v=充气机。充气(R.layout.fav,容器,假);
lSecond=(线性布局)v.findviewbyd(R.id.lSecond);
lThird=(线性布局)v.findViewById(R.id.lThird);
返回v;
}
公共void b创建(字符串i)
{
LinearLayout.LayoutParams btnParams=新的LinearLayout.LayoutParams(matchParent,wrapContent);
Button btnNew=新按钮(this.getActivity());
btnNew.setBackgroundResource(右可绘制按钮);
btnNew.setTextColor(Color.parseColor(#ffffff”);
b.新设文本(i);
scale=getResources().getDisplayMetrics().density;
int top=(int)(5*刻度+0.5f);
int bot=(int)(5*刻度+0.5f);
如果(第二次<第三次)
{
左整数=(整数)(10*刻度+0.5f);
右整数=(整数)(5*刻度+0.5f);
btnParams.leftMargin=左;
btnParams.rightMargin=右侧;
btnParams.topMargin=顶部;
btnParams.bottomMargin=bot;
l第二个添加视图(btnNew、BTNPARMS);
第二++;
btnNew.setOnClickListener(listen);
}
bCreate在onCreate中被调用,字符串i-是数据库中的字符串
bCreate()
被调用得太早。您试图在它有值之前访问lSecond
。在onCreateView()中调用bCreate()
)
就在返回之前。这可能有助于将您的模型与视图分离。这看起来像是在onCreate
(您的模型)中生成了一组字符串。您应该根据先前创建的字符串数组(视图)在onViewCreated
中创建一组按钮。视图反映了模型。不要同时执行这两项操作。视图甚至早在onCreate
时就不可用,因此NPE。调用bCreate()
的位置在哪里?@SammyT它在onCreateYep中被调用,这就是答案,谢谢。我需要更多关注片段的生命周期/