2012-09-20 20 views
17

मैं प्रोग्रामेटिक रूप से विशेषता को AlignParentRight को RelativeLayout में बटन पर सेट करने का प्रयास करता हूं लेकिन प्रोग्राम NullPointerException के साथ क्रैश हो जाता है। यहां मेरा कोड:प्रोग्रामेटिक रूप से सेट विशेषता AlignParentRightRativeout में बटन पर काम नहीं कर रहा है?

//add horizontal realative layout 
RelativeLayout layouth = new RelativeLayout(this); 
layouth.setLayoutParams(new RelativeLayout.LayoutParams(
     LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT)); 

//add textview for label 
TextView t = new TextView(this); 
t.setText(d.getName()); 
t.setTextSize(25); 
t.setId(2);  
t.setLayoutParams(new RelativeLayout.LayoutParams(
     LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT)); 

//add button 
Button b = new Button(this); 
b.setText(d.getName()); 
RelativeLayout.LayoutParams layoutParams =(RelativeLayout.LayoutParams)b.getLayoutParams(); 
layoutParams.addRule(RelativeLayout.ALIGN_PARENT_RIGHT); 
layoutParams.addRule(RelativeLayout.LEFT_OF, 2); 
b.setLayoutParams(layoutParams); 

//add textview and button to horizontal linear layout 
layouth.addView(t); 
layouth.addView(b); 
//add horizontal linear layout to vertical linear layout 
layoutv = (LinearLayout) findViewById(R.id.ProjectViewLinearID); 
layoutv.addView(layouth); 

मेरी समस्या कहां है? कार्यक्रम लाइन में त्रुटि होती है समाधान के साथ layoutParams.addRule(RelativeLayout.ALIGN_PARENT_RIGHT);

अद्यतन:

इस कोड मेरे लिए काम करता है:

// Creating a new RelativeLayout 
RelativeLayout layouth = new RelativeLayout(this); 

// Defining the RelativeLayout layout parameters. 
// In this case I want to fill its parent 
RelativeLayout.LayoutParams rlp = new RelativeLayout.LayoutParams(
     RelativeLayout.LayoutParams.MATCH_PARENT, 
     RelativeLayout.LayoutParams.MATCH_PARENT); 

// Creating a new TextView 
TextView tv = new TextView(this); 
tv.setText(d.getName()); 
tv.setTextSize(25); 

//add button 
Button b = new Button(this); 
b.setText(d.getName()); 

// Defining the layout parameters of the TextView 
RelativeLayout.LayoutParams lp = new RelativeLayout.LayoutParams(
     RelativeLayout.LayoutParams.WRAP_CONTENT, 
     RelativeLayout.LayoutParams.WRAP_CONTENT); 
     lp.addRule(RelativeLayout.ALIGN_PARENT_RIGHT); 

// Setting the parameters on the TextView 
tv.setLayoutParams(lp); 
b.setLayoutParams(lp); 

// Adding the TextView to the RelativeLayout as a child 
layouth.addView(tv); 
layouth.addView(b); 
+2

त्रुटि आप पहले से ही मनाया आप एक 'ClassCastException' मिलना चाहिए अलावा अगले:' 'layouth' LinearLayout.LayoutParams' की जरूरत है के बाद से परम माता पिता के लिए कर रहे हैं लेआउट जो 'LinearLayout' (' layoutv') – zapl

+0

lp.addRule (RelativeLayout.ALIGN_PARENT_RIGHT) है; –

उत्तर

8

जब आप b.getLayoutParams() फोन, ख एक लेआउट में नहीं है। इसलिए, इसमें लेआउटपरैम नहीं हैं (साथ ही, यह नहीं पता होगा कि आप इस बिंदु पर रिलेटिवलाउटआउट के लिए उम्मीद कर रहे हैं।

आपको टेक्स्टव्यू के लिए एक नया लेआउट पैराम उदाहरण बनाना होगा, जैसा कि आपने टेक्स्ट व्यू के लिए किया था।

+0

धन्यवाद, जिसने मेरी समस्या हल की। मैं अद्यतन कोड के साथ अपनी पहली पोस्ट अद्यतन। –

+0

एनपी। zapl टिप्पणी को भी जांचें, वास्तव में लेआउटवैम के साथ लेआउट को जोड़ने के लिए लेआउटपैम के साथ कुछ गलत है – njzk2

15

की जगह

RelativeLayout.LayoutParams layoutParams =(RelativeLayout.LayoutParams)b.getLayoutParams(); 

साथ

RelativeLayout.LayoutParams layoutParams = new RelativeLayout.LayoutParams(
       RelativeLayout.LayoutParams.MATCH_PARENT, 
       RelativeLayout.LayoutParams.WRAP_CONTENT); 
+0

alignParentRight/alignParentLeft को कोड @MukeshSoni में जोड़ने के लिए क्या है? – gumuruh

+5

@gumuruh निम्नानुसार कोड में जोड़ें: layoutParams.addRule (RelativeLayout.ALIGN_PARENT_RIGHT); – Toni

+0

ठीक है। वह कोड है: डी – gumuruh