2010-11-26 15 views
5

मैं ListView में Cursor से जानकारी प्रदर्शित करने की कोशिश कर रहा हूं, प्रत्येक पंक्ति में ImageView और TextView है। मेरे पास CursorAdapter विस्तार CursorAdapter है, bindView में मैं कर्सर से डेटा का मूल्यांकन करता हूं और उस पर आधारित दृश्य छवि और टेक्स्ट सेट करता हूं।CursorAdapter bindView को ओवरराइड कैसे करें

जब मैं ऐप चलाता हूं तो ListView पंक्तियों की सही मात्रा प्रदर्शित करता है, लेकिन वे खाली होते हैं। मुझे पता है कि बाइंडव्यू ओवरराइड करते समय मुझे कुछ याद आया है, लेकिन मुझे यकीन नहीं है कि क्या।

किसी भी मदद की सराहना की जाएगी।

private class CustomCursorAdapter extends CursorAdapter { 

    public CustomCursorAdapter() { 
    super(Lmw.this, monitorsCursor); 
    } 

    @Override 
    public View newView(Context context, Cursor cursor, ViewGroup parent) { 
    LayoutInflater layoutInflater = getLayoutInflater(); 

    return layoutInflater.inflate(R.layout.row, null); 
    } 

    @Override 
    public void bindView(View view, Context context, Cursor cursor) { 
    try { 
     int monitorNameIndex = cursor.getColumnIndexOrThrow(DbAdapter.MONITORS_COLUMN_MONITOR_NAME); 
     int resultTotalResponseTimeIndex = cursor.getColumnIndexOrThrow(DbAdapter.RESULTS_COLUMN_TOTAL_RESPONSE_TIME); 

     String monitorName = cursor.getString(monitorNameIndex); 
     int warningThreshold = cursor.getInt(resultTotalResponseTimeIndex); 

     String lbl = monitorName + "\n" + Integer.toString(warningThreshold) + " ms"; 

     TextView label = (TextView) view.findViewById(R.id.label);  
     label.setText(lbl); 

     ImageView icon = (ImageView)view.findViewById(R.id.icon); 
     if(warningThreshold < 1000) { 
     icon.setImageResource(R.drawable.ok);  
     } else { 
     icon.setImageResource(R.drawable.alarm); 
     } 


    } catch (IllegalArgumentException e) { 
     // TODO: handle exception 
    } 
    } 
} 
+0

मैं इसे बाद में आजमाउंगा, लेकिन 1 टिप्पणी: आपको इन कर्सर.getColumnIndexOrThrow (DbAdapter.MONITORS_COLUMN_MONITOR_NAME) करना चाहिए; 'आपके कन्स्ट्रक्टर में कॉल करें। आप के बारे में 'log.e' अपवाद कैसे? –

उत्तर

4

bindView() विधि ठीक लगता है।

अपने newview के बजाय ऐसे() विधि:

@Override 
public View newView(Context context, Cursor cursor, ViewGroup parent) { 
    return mInflater.inflate(R.layout.row, parent, false); 
} 

और, प्रदर्शन कारणों से: निर्माता

  • एक ही बात में

    • कदम getLayoutInflater() सभी cursor.getColumnIndexOrThrow() कॉल के साथ, ened पहले हीमें कहा गया है टिप्पणी
    • पाठ बनाने अपने LBL के लिए एक StringBuilder का उपयोग
    • Integer.toString (warningThreshold) करने के लिए कोई आवश्यकता नहीं है ... बस का उपयोग warningThreshold

    बाद में संपादित करें: आपके inflate() विधि के बीच एकमात्र अंतर और मैंने सुझाव दिया कि यह एक लेआउट पैराम बनाता है जो चटाई माता पिता जी।

  • +0

    त्रुटि को वास्तव में मेरे एसक्यूएल में बदल दिया गया था, कर्सर में 'RESULTS_COLUMN_TOTAL_RESPONSE_TIME' कॉलम नहीं था। प्रदर्शन मुद्दों के बारे में प्रतिक्रिया के लिए धन्यवाद। आपके उत्तर को सही के रूप में चिह्नित करेगा। – Holm

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