2012-06-12 23 views
5

एंड्रॉइड शुरुआती बनाना। मैं सूची दृश्यों के साथ खेल रहा था, एक्सएमएल फ़ाइल के बजाय उन्हें गतिशील रूप से बनाने की कोशिश कर रहा था। मैं अपने कोड में निम्नलिखित अजीब व्यवहार का पालन करता हूं।प्रोग्रामव्यू को प्रोग्रामेटिक रूप से

public class SettingsHolder extends Activity { 

@Override 
public void onCreate(Bundle savedInstanceState){ 
    super.onCreate(savedInstanceState); 
    LinearLayout ll = new LinearLayout(this); 
    ListView lv = new ListView(this); 
    String[] values = new String[10]; 
    for(int i=0;i<10;i++){ 
     values[i] = ""+i; 
    } 
    ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, R.layout.list_item, values); 
    lv.setAdapter(adapter); 
    lv.setOnItemClickListener(new OnItemClickListener(){ 

     @Override 
     public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, 
       long arg3) { 
      //Toast.makeText(getBaseContext(), ""+arg2,  Toast.LENGTH_SHORT).show(); 
      Log.d("DEBUG", ""+arg2); 

     } 

    }); 

    ll.addView(lv); 
    setContentView(ll); 

} 


} 

असल में मैं पहली बार एक LinearLayout वस्तु बनाने और फिर उसके बच्चे में से एक के रूप में एक ListView वस्तु बनाते हैं। मैंने देखा कि बनाई गई सूची आइटम क्लिक करने योग्य नहीं हैं। लेकिन अगर मैं

setContentView(lv); 

setContentView(ll); 

के बजाय लिखने सूची आइटम क्लिक करने योग्य हैं। क्या कोई इसे समझा सकता है? अगर मुझे अपनी कक्षा को बाद में लागू करना है तो मैं सूची आइटम को क्लिक करने योग्य कैसे बना सकता हूं? मैं ListActivity तरीका नहीं जाना चाहता हूँ।

list_item.xml

<?xml version="1.0" encoding="utf-8"?> 
<TextView xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:padding="10dp" 
    android:textSize="16sp" > 
</TextView> 
+0

आपका कोड ठीक लग रहा है, मैं भी सुनिश्चित करने के लिए संकलित, लेकिन OnItemClickListener के रूप में देने का वादा किया ... – Sam

+0

क्या होता यदि आप सामग्री दृश्य सेट और फिर listvieww जोड़ने निष्पादित करता? – Barak

+0

नहीं, अभी भी काम नहीं करता है। सूची ठीक प्रदर्शित करती है लेकिन सूची आइटम अन-क्लिक करने योग्य हैं। – VJune

उत्तर

6

अपना कोड बदलें:

ll.addView(lv, LayoutParams.FILL_PARENT, LayoutParams.FILL_PARENT); 

समस्या हल, मुझे लगता है, आप सूचीदृश्य लेआउट प्रतिबंध के कुछ प्रकार देना है:

ll.addView(lv); 
इस के लिए

या परिभाषा, तो यह ठीक से काम कर सकते हैं।

+0

हम्म ... यह काम करता है लेकिन बच्चे की चौड़ाई और ऊंचाई बनाना -1 के बराबर देखें थोड़ा अजीब है। क्या आपको नहीं लगता? – VJune

+0

क्यों अजीब? -1 का मतलब है View.FILL_PARENT, मुझे लगता है कि यह उचित है। क्षमा करें, शायद मैंने इसे स्पष्ट नहीं किया है, आप इस तरह लिख सकते हैं: ll.addView (lv, View.FILL_PARENT, View.FILL_PARENT); –

+0

ठीक है अब मैं देख रहा हूं ... धन्यवाद :) – VJune

2

मैं इस काम करने के लिए प्राप्त करने में सक्षम था, लेकिन मैं XML में LinearLayout बनाने के लिए है, जो मुझे लगता है कि कैसे आप इसे से अलग है था। हालांकि, किसी भी तरह से LinearLayout मूल तत्व है, और यह देखते हुए कि आप अभी भी ListView प्रोग्रामेटिक रूप से बना रहे हैं, इसे वास्तव में IMHO में कोई फर्क नहीं पड़ता है।

public class ExampleActivity extends Activity implements OnItemClickListener { 

private LinearLayout ll; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.your_layout); 
    ll = (LinearLayout) findViewById(R.id.main_ll); 
    ListView lv = new ListView(this); 
    ll.addView(lv); 

    String[] values = new String[10]; 
    for (int i = 0; i < 10; i++) { 
     values[i] = "" + i; 
    } 

    ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, 
      android.R.layout.simple_list_item_1, values); 
    lv.setAdapter(adapter); 
    lv.setOnItemClickListener(this); 
} 

@Override 
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) { 
    Toast.makeText(this, "" + arg2, Toast.LENGTH_SHORT).show(); 
    Log.d("DEBUG", "" + arg2); 
} 

}

+0

मेरा प्रश्न मेरे कार्यक्रम के व्यवहार को समझने के लिए और अधिक उद्देश्य था। मैंने अनुमान लगाया कि वैकल्पिक कार्यान्वयन निश्चित रूप से मौजूद होगा। लेकिन आपके उत्तर के लिए धन्यवाद। – VJune

संबंधित मुद्दे