将按钮添加到ScrollView内部的RelativeLayout - NullPointerException

时间:2012-09-23 17:52:50

标签: android xml relativelayout

在这里读了一些类似的问题之后,我仍然被迫在这里发表我的问题。

我有一个Activity应该添加并显示相对于我的SQLite数据库中的游戏数量的一定数量的按钮。此活动必须可滚动。

所以我有我的基本layout-xml文件:

<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingTop="5dp"
    android:paddingBottom="5dp"
    android:paddingLeft="15dp"
    android:paddingRight="15dp" >
    <RelativeLayout 
        android:id="@+id/rel_all_football" 
        android:orientation="vertical"
        android:layout_width="fill_parent" 
        android:layout_height="wrap_content"        
        >

        <TextView 
            style="@style/TextHeader"
            android:id="@+id/tv_all_football_header"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:text="@string/all_games"
            />
        <View   
            android:id="@+id/v_cond_line1"
            android:layout_below="@+id/tv_all_football_header"
            android:layout_height="1dp"
            android:layout_width="fill_parent"
            android:layout_marginBottom="10dp"
            android:background="#FFFFFF"
            />
    </RelativeLayout>

</ScrollView>

现在,对于数据库中的每个条目,我想在Button(标题)和RelativeLayout下的TextView添加View的特定信息(简单的线)。

所以在看完这里的一些问题后,我尝试了这样的事情:

RelativeLayout layout = (RelativeLayout) findViewById(R.id.rel_all_football);

        LayoutInflater inflater = (LayoutInflater) this.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

        Button button;
        for(int i=0; i<3; i++){
            button = new Button(this);
            button.setLayoutParams(
                    new LayoutParams(ViewGroup.LayoutParams.FILL_PARENT, 
                                     ViewGroup.LayoutParams.WRAP_CONTENT));
            button.setText("Hello " + i);

            layout.addView(button);
        }

这导致NullPointerException layout.addView(button)。说实话,这是我第一次尝试从代码中添加内容而不是直接在xml中添加内容,所以我不知道如果我这样做是正确的。我知道View必须至少声明属性layout_widthlayout_height,所以这里有什么问题?我膨胀错了吗?或者我在创建Button

时发现错误

1 个答案:

答案 0 :(得分:1)

我认为你正面临着id的问题,试试这个

ScrollView scrollView = (ScrollView)getLayoutInflater().inflat(R.layout.filename)
        RelativeLayout layout = (RelativeLayout) scrollView.findViewById(R.id.rel_all_football);
        Button button;
        for(int i=0; i<3; i++){
            button = new Button(this);
            button.setLayoutParams( new LayoutParams(ViewGroup.LayoutParams.FILL_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT));
            button.setText("Hello " + i);

            layout.addView(button);
        }

    setContentView(scrollView);