2012-09-23 54 views
0

在閱讀了一些類似的問題後,我仍然不得不在這裏發佈我的問題。將按鈕添加到ScrollView內部的RelativeLayout中 - NullPointerException

我有一個活動,應該添加和顯示一定數量的按鈕相對於我的SQLite數據庫中的遊戲數量。該活動必須是可滾動的。

所以,我有我的基本佈局的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> 

現在,在數據庫中的每個條目,我想在這RelativeLayout的某些信息添加ButtonTextView(標題下)和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); 
     } 

這是在layout.addView(button)造成NullPointerException。說實話,這是我第一次嘗試從代碼中添加內容,而不是直接在xml中添加內容,所以我不知道如果我這樣做是正確的。我知道一個View必須至少有屬性layout_widthlayout_height聲明,所以這裏有什麼問題?我膨脹錯了嗎?或者我在創建Button時發現錯誤?

+1

'findViewById()'只能找到傳遞給'的setContentView意見指出,在當前的佈局,例如在佈局()'。您發佈的佈局是否是您傳遞'setContentView()'的佈局? – Sam

+0

在layout.addView(按鈕)上放置一個斷點並運行您的代碼。我敢打賭,佈局是空的。 – Simon

回答

1

我想你所面臨的一些問題的id sotTry這個

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);