我试图在RelativeLayout中动态添加FrameLayouts但是收到以下错误:
java.lang.NullPointerException:尝试调用虚方法' void android.widget.RelativeLayout.addView(android.view.View)'在空对象引用上
发生在rl.addView(fl)
期间public class StartingPage extends AppCompatActivity {
//set to 1 temporarily
int count = 1;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_starting_page);
RelativeLayout rl = (RelativeLayout) findViewById(R.id.mainMenu);
FrameLayout.LayoutParams params = new FrameLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, 100, Gravity.CENTER_HORIZONTAL| Gravity.CENTER_VERTICAL);
for(int i=0; i < count; i++){
FrameLayout fl = new FrameLayout(this);
fl.setLayoutParams(params);
TextView item = new TextView(this);
fl.addView(item);
rl.addView(fl);
}
}
}
我的研究似乎得出结论,这可行,为什么FrameLayout fl为null?我知道LayoutInflater是一个选项,我曾经简单地尝试过无效,但似乎很多人只是能够创建布局和视图,并以这种更简单的方式将它们添加到所需的父级。
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
android:layout_height="match_parent" android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:paddingBottom="@dimen/activity_vertical_margin"
android:id="@+id/mainMenu"
tools:context="com.marcel.joseph.project.Main_Menu">
</RelativeLayout>
此外,什么使布局为null?是缺少孩子,未定义的属性还是其他什么?
由于
答案 0 :(得分:1)
使用以下代码检查: - 我认为您没有将布局设置为Textview,因为它会导致错误。
public class StartingPage extends AppCompatActivity {
//set to 1 temporarily
int count = 1;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_starting_page);
RelativeLayout rl = (RelativeLayout) findViewById(R.id.mainMenu);
FrameLayout.LayoutParams params = new FrameLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, 100, Gravity.CENTER_HORIZONTAL| Gravity.CENTER_VERTICAL);
for(int i=0; i < count; i++){
FrameLayout fl = new FrameLayout(this);
fl.setLayoutParams(params);
TextView item = new TextView(this);
RelativeLayout.LayoutParams objParams=new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.WRAP_CONTENT,RelativeLayout.LayoutParams.WRAP_CONTENT);
item.setLayoutParams(objParams);
item.setText("test");
fl.addView(item);
rl.addView(fl);
}
}
}
希望它可以帮助你。让我知道代码是否有任何错误。
答案 1 :(得分:0)
你需要首先初始化你的FrameLayout。像这样的东西
// Initialize a new FrameLayout
FrameLayout fl = new FrameLayout(this);
然后您可以为FrameLayout创建布局参数。
FrameLayout.LayoutParams params = new FrameLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, 100, Gravity.CENTER_HORIZONTAL| Gravity.CENTER_VERTICAL);
有一点我不清楚为什么你的xml文件名是mainMenu?你试图使用菜单资源文件吗?