2012-04-02 10 views
11

मैं अपने स्पिनर के ड्रॉप डाउन व्यू में दो मान प्रदर्शित करना चाहता हूं।कस्टम सेटड्रॉपडाउन व्यू रिसोर्स आइटम का उदाहरण

वर्तमान में, इसका केवल शहर का नाम है, लेकिन मैं इसे एक छोटा दूरी क्षेत्र भी जोड़ना चाहता हूं।

MyCity<MyCityDistance> dataAdapter; 

    dataAdapter = new MyCity(this, R.layout.mycityrow, list); 
    dataAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 

मैं मेरे विचार और धारक आदि exapanding कस्टम डेटा एडाप्टर के लिए सभी कोड है,

हालांकि, आइटम जो शो हो जाता है दोनों शहर और मेरे वर्तमान स्थान से इसकी दूरी प्रदर्शित नहीं करता है।

यह केवल दिखाता है कि MyCityDistance क्लास के toString() विधि में ओवरराइड किया गया है।

मैं भी

dataAdapter.setDropDownViewResource(R.layout.mycityrow);

लेकिन, कोई सफलता की स्थापना की कोशिश की। यह एक त्रुटि फेंकता है। अपने स्वयं के कस्टम setDropDownViewResource() बनाने का एक अच्छा उदाहरण

04-02 11:05:22.600: E/AndroidRuntime(367): java.lang.IllegalStateException: ArrayAdapter requires the resource ID to be a TextView 
04-02 11:05:22.600: E/AndroidRuntime(367): at android.widget.ArrayAdapter.createViewFromResource(ArrayAdapter.java:347) 
04-02 11:05:22.600: E/AndroidRuntime(367): at android.widget.ArrayAdapter.getDropDownView(ArrayAdapter.java:376) 
04-02 11:05:22.600: E/AndroidRuntime(367): at android.widget.Spinner$DropDownAdapter.getDropDownView(Spinner.java:332) 

क्या है?

भले ही मैं setDropDownViewResource() लाइन पर टिप्पणी करता हूं, मुझे वही त्रुटि मिलती है।

नोट: केवल प्रभाव mycityrow वर्तमान है कि स्पिनर का पहला तत्व mycityrow के लेआउट के अनुसार दिखाया गया है। हालांकि, जब मैं ड्रॉप डाउन खोलता हूं, तो वह लेआउट गुम हो जाता है। मैं ड्रॉप डाउन चयन के दौरान भी वही लेआउट चाहता हूं।

उत्तर

20

नोट नीचे दिए गए उदाहरण इनबिल्ट android.R.layout.simple_list_item_2 का उपयोग करता है, दुर्भाग्यवश टेक्स्ट रंग पृष्ठभूमि के समान ही होगा। आप इसे अपना स्वयं का कस्टम व्यू बनाकर आसानी से हल कर सकते हैं और इसके बजाय एडाप्टर में इसका उपयोग कर सकते हैं।

मुझे बताएं कि मुझे इसके किसी भी हिस्से को समझाना चाहिए।

public class MainActivity extends Activity { 

    class City { 
     public City(String city, int d) { 
      this.city = city; 
      this.distance = String.valueOf(d); 
     } 

     String city; 
     String distance; 
    } 

    class CityAdapter extends ArrayAdapter<City> { 

     public CityAdapter(Context context, List<City> objects) { 
      super(context, android.R.layout.simple_list_item_2, objects); 
     } 

     @Override //don't override if you don't want the default spinner to be a two line view 
     public View getView(int position, View convertView, ViewGroup parent) { 
      return initView(position, convertView); 
     } 

     @Override 
     public View getDropDownView(int position, View convertView, 
            ViewGroup parent) { 
      return initView(position, convertView); 
     } 

     private View initView(int position, View convertView) { 
      if(convertView == null) 
       convertView = View.inflate(getContext(), 
              android.R.layout.simple_list_item_2, 
              null); 
      TextView tvText1 = (TextView)convertView.findViewById(android.R.id.text1); 
      TextView tvText2 = (TextView)convertView.findViewById(android.R.id.text2); 
      tvText1.setText(getItem(position).city); 
      tvText2.setText(getItem(position).distance); 
      return convertView; 
     } 
    } 

    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
     Spinner spinner = (Spinner)findViewById(R.id.spinner1); 
     List<City> list = new ArrayList<MainActivity.City>(); 
     for(int i = 0; i < 10; i++) 
      list.add(new City(String.format("City %d", i + 1), (i + 1) * 1000)); 
     spinner.setAdapter(new CityAdapter(this, list)); 

    } 

} 
+0

मुझे आश्चर्य है कि यह एक शून्य माता-पिता के साथ कैसे काम करता है? –

+0

माता-पिता को शून्य के रूप में पास करना 'attachToRoot' को लेआउटइनफ्लेटर का उपयोग करके फुलाए जाने के बराबर है। – st0le

+0

इस कोड को लागू करने वाला समाधान मिला :) धन्यवाद –

1

लाइन डेटा एडाप्टर.सेटड्रॉपडाउन व्यूअरसोर्स() पर टिप्पणी करने का प्रयास करें और एडाप्टर ड्रॉप डाउन के लिए mycityow लेआउट फ़ाइल का उपयोग करने का प्रयास करेगा। सरल मामलों में काम करता है।

+0

धन्यवाद, मैंने पहले उस दृष्टिकोण को आजमाया, अब मेरा प्रश्न अपडेट करें। –

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