2015-03-13 62 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

相关问题