2010-12-08 35 views
6

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

public void onCreate(Bundle savedInstanceState) { 

    private List<Map<String, String>> data = new ArrayList<Map<String, String>>(); 

    String[] from = new String[] { "colorsData" }; 
    int[] to = new int[] { R.id.spinner }; 

    String[] colors = getResources().getStringArray(R.array.colorsData); 

    for (int i = 0; i < colors.length; i++) { 
    data.add(addData(colors[i])); 
    } 

    Spinner spinner = (Spinner) findViewById(R.id.spinner); 

    SimpleAdapter simpleAdapter = new SimpleAdapter(this, data, android.R.layout.simple_spinner_item, from, to); 
    simpleAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
    spinner.setAdapter(simpleAdapter); 

    spinner.setOnItemSelectedListener(new OnItemSelectedListener() { 
    @Override 
    public void onItemSelected(AdapterView<?> parent, View view, 
    int position, long id) { 
    Toast.makeText(
     parent.getContext(), 
     "Selected Color:- " 
     + parent.getItemAtPosition(position), 
     Toast.LENGTH_LONG).show(); 
    } 
    }); 
} 

private Map<String, String> addData(String colorName) { 
    Map<String, String> mapList = new HashMap<String, String>(); 
    mapList.put("colorsData", colorName); 
    return mapList; 
} 
+0

आपके प्रश्न पर एक छोटी नज़र के साथ, मुझे यकीन नहीं है कि आप वास्तव में क्या प्राप्त करना चाहते हैं। लेकिन अगर आप एंड्रॉइड में कॉन्फ़िगर पेज जैसे कुछ यूआई तत्व चाहते हैं। i.e: सूची दृश्य में किसी आइटम पर क्लिक करें और कुछ चुनने के लिए एक संवाद पॉप करें, आप 'वरीयता' का प्रयास कर सकते हैं। वरीयता आपके ऐप को कॉन्फ़िगर करने के लिए एक श्रृंखला UI तत्व है। –

उत्तर

5

मैं लगभग 95% सुनिश्चित करें कि आपके to सरणी के रूप में घोषित किया जाना चाहिए हूँ:

int[] to = new int[] { android.R.id.text1 }; 

कि आज़मा कर देखें।


संपादित (नीचे टिप्पणी के आधार पर):

ऐसा लगता है वहाँ जो कि IllegalStateException वजह से AndroidOS के पुराने संस्करणों में एक बग था। (मुझे 2.2 में अपवाद नहीं देखा गया था, लेकिन मैंने इसे एमुलेटर में 1.5 में देखा था।) सरल एडाप्टर में व्यूबिंडर जोड़कर बग को चारों ओर काम किया जा सकता है। ViewBinder लागू करने के लिए मुश्किल नहीं है; यहां एक उदाहरण दिया गया है:

SimpleAdapter.ViewBinder viewBinder = new SimpleAdapter.ViewBinder() { 

     public boolean setViewValue(View view, Object data, 
       String textRepresentation) { 
      // We configured the SimpleAdapter to create TextViews (see 
      // the 'to' array), so this cast should be safe: 
      TextView textView = (TextView) view; 
      textView.setText(textRepresentation); 
      return true; 
     } 
    }; 
    simpleAdapter.setViewBinder(viewBinder); 

मैंने इस here के बारे में ब्लॉग किया।

+0

मैंने कोशिश की। लेकिन जैसे ही मैं स्पिनर ड्रॉपडाउन बटन पर क्लिक करता हूं, यह एक IllegalStateException के साथ क्रैश हो रहा है। – Chromium

+0

लेकिन क्या आप वास्तव में अब टेक्स्ट लेबल्स देख रहे हैं? मुझे लगता है कि अपवाद का मतलब है कि एडाप्टर बनाने के बाद 'डेटा' सूची में कुछ बदल गया है। क्या यह संभव है? –

+0

नहीं, मैं डेटा सूची नहीं बदल रहा हूं। मुझे आश्चर्य है कि स्पिनर को पॉप्युलेट करने के लिए सरल एडाप्टर का उपयोग किया जा सकता है या नहीं। – Chromium

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