Android 根据属性更改背景颜色

Android 根据属性更改背景颜色,android,android-listview,Android,Android Listview,我想根据光标当前成员的某些属性更改ListItem背景的颜色。我使用SimpleCursorAdapter将数据库的值绑定到ListView。我所做的是创建一个颜色选择器,如下所示: <?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_activated=

我想根据光标当前成员的某些属性更改ListItem背景的颜色。我使用SimpleCursorAdapter将数据库的值绑定到ListView。我所做的是创建一个颜色选择器,如下所示:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_activated="true" android:drawable="@android:color/holo_blue_dark" />
    <item android:state_activated="true" android:state_selected="true" android:drawable="@android:color/holo_blue_dark" />
    <item android:state_selected="true" android:drawable="@color/rosa" />
    <item android:drawable="@android:color/transparent" />
</selector>

但它不起作用。做我想做的事的正确方法是什么?

无需选择。。。。只需通过编程将“setBackgroundColor(Color.Blue)”写在你的布局上`

if(columnIndex == 6)
{ 
   layout.setBackgroundColor(Color.Blue)
}
这是我的选择器xml

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <!-- Non focused states --> 
    <item android:state_focused="false" android:state_selected="false" android:state_pressed="false" android:drawable="@drawable/vhclistrowbackground" /> 
    <item android:state_focused="false" android:state_selected="true" android:state_pressed="false" android:drawable="@color/text_tab_unselected" /> 

    <!-- Focused states --> 
    <item android:state_focused="true" android:state_selected="false" android:state_pressed="false" android:drawable="@color/text_tab_selected" /> 
    <item android:state_focused="true" android:state_selected="true" android:state_pressed="false" android:drawable="@color/text_tab_unselected" /> 

    <!-- Pressed --> 
    <item android:state_pressed="true" android:drawable="@color/text_tab_unselected" /> 
</selector> 

也许更好的方法是编写自己的类,该类继承自SimpleCursorAdapter。诸如此类:

public class BubbleListAdapter extends SimpleCursorAdapter {

private LayoutInflater mLayoutInflater;
/** list holding statuses determining if an item is checked/unchecked. */
protected List<Boolean> mItemsCheckedStatus;
/** Cursor. */
private Cursor cursor;
/** reference to ArdoiseDatabaseAdapter. */
private MyDatabaseAdapter mMyDatabaseAdapter;
/** application context. */
private Context context;
/** references to Users. */
private Users mUsers;

/**
 * View holder for color item.
 */
private static class ViewHolder {
    /** bubble text. */
    TextView buubleText;
    /** user name. */
    TextView userName;
}

public BubbleListAdapter(Context context, int layout, Cursor cursor, String[] from, int[] to) {
    super(context, layout, cursor, from, to);
    this.cursor = cursor;
    mLayoutInflater = LayoutInflater.from(context);
    mMyDatabaseAdapter = MyDatabaseAdapter.getInstance();
    this.context = context;
}

@Override
public View newView(Context context, Cursor cursor, ViewGroup parent) {
    View view = mLayoutInflater.inflate(R.layout.bubble_list_item, null);
    final ViewHolder holder = new ViewHolder();
    holder.buubleText = (TextView) view.findViewById(R.id.bubble_list_text);
    holder.userName = (TextView) view.findViewById(R.id.bubble_list_user_name);
    view.setTag(holder);
    return view;
}

@Override
public void bindView(View view, Context context, Cursor cursor) {       
    Cursor c = getCursor();
    final ViewHolder holder;
    if (view != null) {
        holder = (ViewHolder) view.getTag();
        holder.buubleText.setText(c.getString(c.getColumnIndex(BubblesTableMetaData.BUBBLE_TEXT)));
        if (mUsers != null) {
            switch (c.getInt(c.getColumnIndex(BubblesTableMetaData.USER_ID))) {
            case MyConstans.COLOR_RED:
                holder.buubleText.setBackgroundResource(R.drawable.bubble_red_edit);
                holder.userName.setTextColor(context.getResources().getColor(R.color.bubble_red));
                holder.userName.setText(mUsers.getUser1());
                break;
            case MyConstans.COLOR_BLUE:
                holder.buubleText.setBackgroundResource(R.drawable.bubble_blue_edit);
                holder.userName.setTextColor(context.getResources().getColor(R.color.bubble_blue));
                holder.userName.setText(mUsers.getUser2());
                break;
            case MyConstans.COLOR_GREEN:
                holder.buubleText.setBackgroundResource(R.drawable.bubble_green_edit);
                holder.userName.setTextColor(context.getResources().getColor(R.color.bubble_green));
                holder.userName.setText(mUsers.getUser3());
                break;
            case MyConstans.COLOR_VIOLET:
                holder.buubleText.setBackgroundResource(R.drawable.bubble_violet_edit);
                holder.userName.setTextColor(context.getResources().getColor(R.color.bubble_violet));
                holder.userName.setText(mUsers.getUser4());
                break;
            default:
                break;
            }
        }
        view.setTag(holder);
    }
}

@Override
public Object getItem(int position) {
    Bubble bubble = null;
    if (cursor != null) {
        int index = 0;
        if (cursor.moveToFirst()) {
            do {
                if (index == position) {
                    bubble = mArdoiseDatabaseAdapter.mapBubble(context, cursor);
                }
                index++;
            } while (cursor.moveToNext());
            return bubble;
        }
    }
    return bubble;
}

/**
 * Get users.
 * 
 * @return the mUsers
 */
public Users getmUsers() {
    return mUsers;
}

/**
 * Set users.
 * 
 * @param mUsers
 *            the mUsers to set
 */
public void setmUsers(Users mUsers) {
    this.mUsers = mUsers;
}

@Override
public int getCount() {
    return cursor.getCount();
}
}
公共类BubbleListAdapter扩展了SimpleCursAdapter{
私人停车场平面布置;
/**确定项目是否已选中/未选中的列表保留状态*/
受保护列表mItemsCheckedStatus;
/**光标*/
私有游标;
/**参考ArdoiseDatabaseAdapter*/
私有MyDatabaseAdapter mMyDatabaseAdapter;
/**应用程序上下文*/
私人语境;
/**对用户的引用*/
私人用户;
/**
*颜色项的视图保持架。
*/
私有静态类视图持有者{
/**气泡文本*/
文本视图buubleText;
/**用户名*/
文本视图用户名;
}
公共BubbleListAdapter(上下文上下文、int布局、光标、字符串[]从、int[]到){
超级(上下文、布局、光标、从、到);
this.cursor=游标;
mLayoutInflater=LayoutInflater.from(上下文);
mMyDatabaseAdapter=MyDatabaseAdapter.getInstance();
this.context=上下文;
}
@凌驾
公共视图newView(上下文上下文、光标、视图组父对象){
视图=MLAYOUTIONFLATER.充气(R.layout.bubble\u list\u项,空);
最终视图持有者=新的视图持有者();
holder.buubleText=(TextView)view.findViewById(R.id.bubble\u list\u text);
holder.userName=(TextView)view.findViewById(R.id.bubble\u list\u user\u name);
视图.设置标签(支架);
返回视图;
}
@凌驾
public void bindView(视图、上下文上下文、光标){
游标c=getCursor();
最终持票人;
如果(视图!=null){
holder=(ViewHolder)view.getTag();
holder.buubleText.setText(c.getString(c.getColumnIndex(bubbleTableMetadata.BUBBLE_TEXT));
if(mUsers!=null){
开关(c.getInt(c.getColumnIndex(bubbleTableMetadata.USER_ID))){
案例MyConstans.COLOR\u RED:
holder.buubleText.setBackgroundResource(R.drawable.bubble\u red\u edit);
holder.userName.setTextColor(context.getResources().getColor(R.color.bubble_red));
holder.userName.setText(mUsers.getUser1());
打破
案例MyConstans.COLOR\u蓝色:
holder.buubleText.setBackgroundResource(R.drawable.bubble\u blue\u edit);
holder.userName.setTextColor(context.getResources().getColor(R.color.bubble_blue));
holder.userName.setText(mUsers.getUser2());
打破
案例MyConstans.COLOR\u绿色:
holder.buubleText.setBackgroundResource(R.drawable.bubble\u green\u edit);
holder.userName.setTextColor(context.getResources().getColor(R.color.bubble_green));
holder.userName.setText(mUsers.getUser3());
打破
案例MyConstans.COLOR\u紫色:
holder.buubleText.setBackgroundResource(R.drawable.bubble\u-violet\u-edit);
holder.userName.setTextColor(context.getResources().getColor(R.color.bubble_-violet));
holder.userName.setText(mUsers.getUser4());
打破
违约:
打破
}
}
视图.设置标签(支架);
}
}
@凌驾
公共对象getItem(int位置){
气泡=空;
如果(光标!=null){
int指数=0;
if(cursor.moveToFirst()){
做{
如果(索引==位置){
bubble=mardoiseadapter.mapbuble(上下文,光标);
}
索引++;
}while(cursor.moveToNext());
回归泡沫;
}
}
回归泡沫;
}
/**
*获取用户。
* 
*@回到缪斯家
*/
公共用户getmUsers(){
回归缪斯者;
}
/**
*设置用户。
* 
*@param mUsers
*要设置的缪斯者
*/
公共作废设置器(用户设置器){
this.mUsers=mUsers;
}
@凌驾
public int getCount(){
返回cursor.getCount();
}
}

我希望这有帮助。

我不太确定,但您可以试试:

    if (columnIndex == 6) {
        boolean dudoso = cursor.getInt(columnIndex) == 1;
        TextView textView = (TextView) view;
        textView.setText(dudoso ? "dudoso" : null);
        if(dudoso)
        {
            v.setSelected(true);

        }
        return true;
    }

如果选择了行,我还希望有不同的颜色。我希望所选颜色优先于属性颜色。您是否将您的选择器xml作为您在主xml中单击的布局的背景…???是。我将在问题中添加listview行的布局。
public class BubbleListAdapter extends SimpleCursorAdapter {

private LayoutInflater mLayoutInflater;
/** list holding statuses determining if an item is checked/unchecked. */
protected List<Boolean> mItemsCheckedStatus;
/** Cursor. */
private Cursor cursor;
/** reference to ArdoiseDatabaseAdapter. */
private MyDatabaseAdapter mMyDatabaseAdapter;
/** application context. */
private Context context;
/** references to Users. */
private Users mUsers;

/**
 * View holder for color item.
 */
private static class ViewHolder {
    /** bubble text. */
    TextView buubleText;
    /** user name. */
    TextView userName;
}

public BubbleListAdapter(Context context, int layout, Cursor cursor, String[] from, int[] to) {
    super(context, layout, cursor, from, to);
    this.cursor = cursor;
    mLayoutInflater = LayoutInflater.from(context);
    mMyDatabaseAdapter = MyDatabaseAdapter.getInstance();
    this.context = context;
}

@Override
public View newView(Context context, Cursor cursor, ViewGroup parent) {
    View view = mLayoutInflater.inflate(R.layout.bubble_list_item, null);
    final ViewHolder holder = new ViewHolder();
    holder.buubleText = (TextView) view.findViewById(R.id.bubble_list_text);
    holder.userName = (TextView) view.findViewById(R.id.bubble_list_user_name);
    view.setTag(holder);
    return view;
}

@Override
public void bindView(View view, Context context, Cursor cursor) {       
    Cursor c = getCursor();
    final ViewHolder holder;
    if (view != null) {
        holder = (ViewHolder) view.getTag();
        holder.buubleText.setText(c.getString(c.getColumnIndex(BubblesTableMetaData.BUBBLE_TEXT)));
        if (mUsers != null) {
            switch (c.getInt(c.getColumnIndex(BubblesTableMetaData.USER_ID))) {
            case MyConstans.COLOR_RED:
                holder.buubleText.setBackgroundResource(R.drawable.bubble_red_edit);
                holder.userName.setTextColor(context.getResources().getColor(R.color.bubble_red));
                holder.userName.setText(mUsers.getUser1());
                break;
            case MyConstans.COLOR_BLUE:
                holder.buubleText.setBackgroundResource(R.drawable.bubble_blue_edit);
                holder.userName.setTextColor(context.getResources().getColor(R.color.bubble_blue));
                holder.userName.setText(mUsers.getUser2());
                break;
            case MyConstans.COLOR_GREEN:
                holder.buubleText.setBackgroundResource(R.drawable.bubble_green_edit);
                holder.userName.setTextColor(context.getResources().getColor(R.color.bubble_green));
                holder.userName.setText(mUsers.getUser3());
                break;
            case MyConstans.COLOR_VIOLET:
                holder.buubleText.setBackgroundResource(R.drawable.bubble_violet_edit);
                holder.userName.setTextColor(context.getResources().getColor(R.color.bubble_violet));
                holder.userName.setText(mUsers.getUser4());
                break;
            default:
                break;
            }
        }
        view.setTag(holder);
    }
}

@Override
public Object getItem(int position) {
    Bubble bubble = null;
    if (cursor != null) {
        int index = 0;
        if (cursor.moveToFirst()) {
            do {
                if (index == position) {
                    bubble = mArdoiseDatabaseAdapter.mapBubble(context, cursor);
                }
                index++;
            } while (cursor.moveToNext());
            return bubble;
        }
    }
    return bubble;
}

/**
 * Get users.
 * 
 * @return the mUsers
 */
public Users getmUsers() {
    return mUsers;
}

/**
 * Set users.
 * 
 * @param mUsers
 *            the mUsers to set
 */
public void setmUsers(Users mUsers) {
    this.mUsers = mUsers;
}

@Override
public int getCount() {
    return cursor.getCount();
}
}
    if (columnIndex == 6) {
        boolean dudoso = cursor.getInt(columnIndex) == 1;
        TextView textView = (TextView) view;
        textView.setText(dudoso ? "dudoso" : null);
        if(dudoso)
        {
            v.setSelected(true);

        }
        return true;
    }