Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/193.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 通过适配器更改listview中行的背景色_Android_Android Listview - Fatal编程技术网

Android 通过适配器更改listview中行的背景色

Android 通过适配器更改listview中行的背景色,android,android-listview,Android,Android Listview,我正试图实现一种类似gmail的选择行为:当我点击一个项目时,它要么被选中,要么被取消选中,并在选中的项目上绘制一个自定义颜色。我用它作为参考 出于某种原因,它只有在我选择/取消选择一些项目后才起作用。然后,调用getView(),一切都按预期进行。 为什么不从一开始就调用getView() 列表活动: @Override public void onListItemClick(ListView parent, View view, int position, long id) { su

我正试图实现一种类似gmail的选择行为:当我点击一个项目时,它要么被选中,要么被取消选中,并在选中的项目上绘制一个自定义颜色。我用它作为参考

出于某种原因,它只有在我选择/取消选择一些项目后才起作用。然后,调用getView(),一切都按预期进行。 为什么不从一开始就调用getView()

列表活动:

@Override
public void onListItemClick(ListView parent, View view, int position, long id) {
    super.onListItemClick(parent, view, position, id);
    mSimpleCursorAdapter.toggleSelected(new Integer(position));
}
适配器:

 public ArrayList<Integer> selectedIds = new ArrayList<Integer>();

@Override
 public View getView(int position, View convertView, ViewGroup parent) {
    mCursor = (Cursor) getItem(position);
    ViewHolder holder = null;
    int col = -1;

    if(convertView == null) 
    {   
        holder = new ViewHolder();
        convertView = mInflater.inflate(R.layout.row, parent, false);

        holder.mTitle = (TextView) convertView.findViewById(R.id.titleID);
        convertView.setTag(holder);

    } else {
        holder = (ViewHolder) convertView.getTag();
    }

    col = mCursor.getColumnIndex(ReminderColumns.TITLE);
    holder.mTitle.setText(mCursor.getString(col));

    if (selectedIds.contains(position)) {
        convertView.setSelected(true);
        convertView.setPressed(true);
        convertView.setBackgroundColor(mContext.getResources().getColor(R.color.orange));
    }
    else
    {
        convertView.setSelected(false);
        convertView.setPressed(false);
        convertView.setBackgroundColor(mContext.getResources().getColor(R.color.white));
    }   
return convertView; 
}

public void toggleSelected(Integer position)
{
    if(selectedIds.contains(position))
    {
        selectedIds.remove(position);
    }
    else
    {
        selectedIds.add(position);
    }
}
public ArrayList selectedds=new ArrayList();
@凌驾
公共视图getView(int位置、视图转换视图、视图组父视图){
mCursor=(光标)getItem(位置);
ViewHolder=null;
int col=-1;
if(convertView==null)
{   
holder=新的ViewHolder();
convertView=mInflater.充气(R.layout.row,父项,false);
holder.mTitle=(TextView)convertView.findViewById(R.id.titleID);
convertView.setTag(支架);
}否则{
holder=(ViewHolder)convertView.getTag();
}
col=mCursor.getColumnIndex(提醒Columns.TITLE);
holder.mTitle.setText(mCursor.getString(col));
如果(选择包含(位置)){
convertView.setSelected(true);
convertView.setPressed(true);
setBackgroundColor(mContext.getResources().getColor(R.color.orange));
}
其他的
{
convertView.setSelected(false);
convertView.setPressed(false);
setBackgroundColor(mContext.getResources().getColor(R.color.white));
}   
返回视图;
}
公共无效切换选择(整数位置)
{
如果(选择包含(位置))
{
选择D。删除(位置);
}
其他的
{
选择edids.add(位置);
}
}

是否尝试添加
notifyDataSetChanged()

也许这样添加会有帮助:

@Override
public void onListItemClick(ListView parent, View view, int position, long id) {
    super.onListItemClick(parent, view, position, id);
    mSimpleCursorAdapter.toggleSelected(new Integer(position));
    mSimpleCursorAdapter.notifyDataSetChanged();
}

谢谢,这很有效。我不明白为什么点击几下就会更新