2013-08-29 60 views
3

我在活動programmaticaly中創建按鈕,而不是在xml文件中。然後,我想在此鏈接中設置LayoutParams:How to programmatically set the layout_align_parent_right attribute of a Button in Relative Layout?空指針異常設置LayoutParams

但是,當我嘗試啓動時,出現異常。

這裏是我的代碼:

RelativeLayout ll2 = new RelativeLayout(this); 
    //ll2.setOrientation(LinearLayout.HORIZONTAL); 

    ImageButton go = new ImageButton(this); 
    go.setId(cursor.getInt(cursor.getColumnIndex("_id"))); 
    go.setClickable(true); 
    go.setBackgroundResource(R.drawable.go); 
    RelativeLayout.LayoutParams params1 = (RelativeLayout.LayoutParams)go.getLayoutParams(); 
    params1.addRule(RelativeLayout.ALIGN_PARENT_RIGHT); // LogCat said I have Null Pointer Exception in this line 
    go.setLayoutParams(params1); 
    go.setOnClickListener(new OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      Intent i3 = new Intent(RecipesActivity.this, MedicineActivity.class); 
      i3.putExtra(ShowRecipe, v.getId()); 
      i3.putExtra("Activity", "RecipesActivity"); 
      RecipesActivity.this.startActivity(i3); 
     } 
    }); 
    ll2.addView(go); 

爲什麼我的應用程序拋出一個異常?謝謝。

+0

大概LogCat行上面的那一行指向空指針會變爲null,但是爲了幫助您更好地更新發布錯誤的問題。 – groff07

回答

14

更改此:

RelativeLayout.LayoutParams params1 = (RelativeLayout.LayoutParams)go.getLayoutParams(); 
params1.addRule(RelativeLayout.ALIGN_PARENT_RIGHT); 
go.setLayoutParams(params1); 

爲:

RelativeLayout.LayoutParams params1 = new RelativeLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT); 
params1.addRule(RelativeLayout.ALIGN_PARENT_RIGHT); 
go.setLayoutParams(params1); 

當您創建一個視圖編程它沒有任何的LayoutParams,這就是爲什麼你得到NullPointerException異常。如果您從XML擴充視圖,現在將使用LayoutParams顯示視圖。

+0

'LayoutParams.MATCH_PARENT'需要設置爲'RelativeLayoutParams.MATCH_PARENT',因爲'LayoutParams'有多種類型 – anurupr

1

從我所看到的,它看起來像

go.getLayoutParams() 

回報null在這一行

RelativeLayout.LayoutParams params1 = (RelativeLayout.LayoutParams)go.getLayoutParams(); 

,因爲你自己也沒有LayoutParams集。這顯然讓params1null等你拿NPE這裏

params1.addRule(RelativeLayout.ALIGN_PARENT_RIGHT); 

當您嘗試它(addRule(RelativeLayout.ALIGN_PARENT_RIGHT)

getLayoutParams()是對於已經設置params一個View運行的方法。所以,你需要嘗試get他們使用另一個View

0

此方法可能返回null如果這種觀點是不附加到父ViewGroup中或{@link #setLayoutParams(android.view之前設置他們go .ViewGroup.LayoutParams)}未被成功調用。當View被附加到父ViewGroup時,該方法不能返回null。

getLayoutParams()在View.java註釋,是programly創建您的ImageButton並沒有連接到當你調用該方法的父ViewGroup中,所以它返回null。