2015-03-13 27 views
0

我使用來自SQLite數據庫的數據填充ListView,然後使用SimpleAdapter來顯示它。每行的一個字段是String,它指的是一種顏色。我想根據那個String設置每一行的背景顏色。我怎樣才能做到這一點?如何初始化ListView中的某些行項目?

編輯:我添加的代碼我用我的數據附加到ListView:

listView_commentaires = (ListView) findViewById(R.id.liste_favoris); 
        daofavoris = new DAOFavoris(FavorisActivity.this); 
        daofavoris.open(); 
        List<Commentaire> response = new ArrayList<Commentaire>(); 
        response = daofavoris.getAllFavoris(); 
        try { 
            favoris = new ArrayList<HashMap<String, Object>>(); 
            for (Commentaire commentaire : response) { 
                HashMap<String, Object> element; 
                element = new HashMap<String, Object>() 
                byte[] miniature = commentaire.decodeMiniature(); 
                Bitmap bitmap = BitmapFactory.decodeByteArray(miniature, 0, miniature.length); 
                element.put("BITMAP", bitmap); 
                element.put("CONTENT", commentaire.getContent()); 
                element.put("AUTHOR", commentaire.getAuthor()); 
                element.put("DATE", Constantes.getRealDate(commentaire.getDate())); 
                favoris.add(element); 
            } 
            simpleAdapter = new SimpleAdapter(FavorisActivity.this, 
                    favoris, R.layout.favoris_liste, new String[] { 
                            "BITMAP", "CONTENT", "AUTHOR", "DATE" }, 
                    new int[] { R.id.media_favoris, 
                            R.id.favoris_content, 
                            R.id.favoris_author, 
                            R.id.favoris_timestamp }); 
            simpleAdapter.setViewBinder(new SimpleAdapter.ViewBinder() { 
                @Override 
                public boolean setViewValue(View view, Object data, 
                        String textRepresentation) { 
                    if ((view instanceof ImageView) 
                            & (data instanceof Bitmap)) { 
                        ImageView iv = (ImageView) view; 
                        Bitmap bm = (Bitmap) data; 
                        iv.setImageBitmap(bm); 
                        return true; 
                    } 
                    return false; 
                } 
            }); 
            listView_commentaires.setAdapter(simpleAdapter); 

回答

0

而不是使用SimpleAdapter,你可以使用一個SimpleCursorAdapter這樣的:

SimpleCursorAdapter adapter = 
    new SimpleCursorAdapter(
     getActivity(), 
     R.layout.yourLayout, 
     yourCursor, 
     new String[] { 
     YourColumnName 
     }, 
     new int[]{ 
     R.id.your_root_layout_element 
     }, 0 
    ); 

    adapter.setViewBinder(
    new SimpleCursorAdapter.ViewBinder() { 
     @Override 
     public boolean setViewValue(View view, Cursor cursor, int columnIndex) { 
     LinearLayout rootLayout = (LinearLayout) view; 
     setBackgroundColor(
      Color.parseColor(
      cursor.getString(0))); 
     return true; 
     } 

    }); 

其中:

  • R.layout.yourLayout是您用於ListView的每一行的佈局資源;
  • yourCursor是包含從數據庫接收到的數據的Cursor;
  • yourColumnName就是你有顏色的列名的String表示;
  • R.id.your_root_layout_element是分配給您的佈局的根元素的ID。在這個例子中,我假設它是一個LinearLayout;
  • Color.parseColor(cursor.getString(0))String生成的顏色標識符取自數據庫。

之後,你有這個SimpleCursorAdapter分配給您的ListView如下:listView.setAdapter(adapter);

我希望這對你有所幫助。

+0

謝謝你,不過我已經使用setViewBinder因爲我根據各行的另一個字符串字段設置一個位圖:'simpleAdapter.setViewBinder(新的SimpleAdapter。ViewBinder(){ \t \t \t \t @Override \t \t \t \t公共布爾setViewValue(查看圖,對象數據, \t \t \t \t \t \t字符串textRepresentation){ \t \t \t \t \t如果((視圖的instanceof ImageView的) \t \t \t \t \t \t \t&(數據instanceof位圖)){ \t \t \t \t \t \t ImageView iv =(ImageView)view; \t \t \t \t \t \t位圖bm =(位圖)data; \t \t \t \t \t \t iv.setImageBitmap(bm); \t \t \t \t \t \t return true; \t \t \t \t \t} \t \t \t \t \t返回FALSE; \t \t \t \t} \t \t \t});' – Gannicus 2015-03-13 11:25:56

0

內部適配器類把這個代碼:

convertView.setBackgroundColor(mContext.getResources().getColor(R.color.message_selector_holo_blue)); 

根據condtion改變行的顏色

+0

這假定我使用自定義適配器?我只是使用SimpleAdapter。 – Gannicus 2015-03-13 11:32:03

+0

參考這個鏈接http://stackoverflow.com/questions/4199795/how-to-do-custom-listview-with-colorful-items-backgrounds – 2015-03-13 11:38:14

+0

我提到的鏈接,但應用程序崩潰,因爲在getView的一些NullPointerException ' – Gannicus 2015-03-13 12:41:51

相關問題