如何在android中切换更改列表项的背景

如何在android中切换更改列表项的背景,android,listview,Android,Listview,怎么了?我有一个列表视图,我想在单击列表项目时更改项目的背景。如果我选择一个项目,然后单击其他项目,则将背景切换到另一个项目。这是单一选择过程 if (convertView == null) { convertView = mInflater.inflate(R.layout.customer_account_customview, null); holder = new ViewHolder(); holder.tr = (TableRow)convertView.findVie

怎么了?我有一个列表视图,我想在单击列表项目时更改项目的背景。如果我选择一个项目,然后单击其他项目,则将背景切换到另一个项目。这是单一选择过程

if (convertView == null)  
{  
convertView = mInflater.inflate(R.layout.customer_account_customview, null);  
holder = new ViewHolder();
holder.tr = (TableRow)convertView.findViewById(R.id.tableRow);
convertView.setTag(holder);
}  
else  
{  
holder = (ViewHolder) convertView.getTag();
}
holder.tr.setTag((Integer)position);

holder.tr.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View view)
{
    int tableRowPosition=(new Integer((Integer) view.getTag())).intValue();
    Log.i("Position of Row click", ""+tableRowPosition);
    holder.tr.setBackgroundDrawable(getResources().getDrawable(R.drawable.abc));
}
});

class CustomerAccountAdapter扩展了BaseAdapter
{
公共CustomerAccountAdapter(){
mInflater=LayoutInflater.from(CustomerAccount.this);
selectedIds=newarraylist();
}
@凌驾
public int getCount(){
//TODO自动生成的方法存根
返回arraylist_invoices.size();
}
@凌驾
公共对象getItem(int位置){
//TODO自动生成的方法存根
返回arraylist_发票。获取(位置);
}
@凌驾
公共长getItemId(int位置){
返回位置;
}
@凌驾
公共视图getView(int位置、视图转换视图、视图组父视图){
vvw=转换视图;
Log.i(“内部”、“getView()”);
如果(vvw==null)
{  
vvw=mInflater.flate(R.layout.customer\u account\u customview,空);
holder=新的ViewHolder();
holder.tableRow=(tableRow)vvw.findViewById(R.id.tableRow10);
vvw.设置标签(支架);
}  
其他的
{  
holder=(ViewHolder)vvw.getTag();
}           
holder.tableRow.setTag((整数)位置);
holder.tableRow.setOnClickListener(新的OnClickListener(){
@凌驾
公共void onClick(视图)
{
//TODO自动生成的方法存根
Integer myIntegerObject=newinteger((Integer)view.getTag());
tableRowPosition=myIntegerObject.intValue();
Log.i(“行位置单击“,”+表行位置);
//notifyDataSetChanged();
//支架.表格行.立根资源(R.可绘制.表格标题形状);
//holder.tableRow.setBackgroundDrawable(getResources().getDrawable(R.drawable.cancel_big_butt));
notifyDataSetChanged();
//holder.tableRow.setBackgroundResource();
}
});
返回vvw;
}
}
私有类视窗持有者
{  
TextView txtDate、txtInv、txtAmt、txtPaid、txtBal、txtDays;
TableRow TableRow;//TableRow内的所有TextView
}

您必须存储每个列表项的背景状态,并在getView方法中引用该状态以决定应用哪个背景。因此,您可以向列表中的任何类添加成员变量,也可以创建第二个数组,该数组的元素数与列表中的元素数相同,并使用项位置获取状态

我有点困惑,因为你发布了两个不同的类做相似的事情。因此,这可能与您的类不完全匹配,但我会向ViewHolder类添加一个布尔值,如下所示:

private class ViewHolder
{  
    TextView txtDate, txtInv, txtAmt, txtPaid, txtBal,txtDays;
    TableRow tableRow;// All TextView inside TableRow
    boolean backgroundChanged = false;
}
然后,就在
返回vvw之前,放置

holder.tr.setBackgroundDrawable( getResources().getDrawable( 
    holder.backgroundChanged? R.drawable.theDefaultBackground : R.drawable.abc
));
然后在onClickListener中,按下时还需要存储此值:

public void onClick(View view)
{
    int tableRowPosition=(new Integer((Integer) view.getTag())).intValue();
    Log.i("Position of Row click", ""+tableRowPosition);
    holder.tr.setBackgroundDrawable(getResources().getDrawable(R.drawable.abc));
    holder.backgroundChanged = true;
}

顺便说一句,每次视图滚动到屏幕上时,您都在创建同一个onClickListener的新副本,这可能会使动画不那么平滑。我建议创建一个应用于getView中所有视图的onClickListener。

到目前为止,这段代码做了什么???我有一个listview,并且有一个用于此列表的自定义视图,即“tr”。我想在单击时更改此列表项的背景。
public void onClick(View view)
{
    int tableRowPosition=(new Integer((Integer) view.getTag())).intValue();
    Log.i("Position of Row click", ""+tableRowPosition);
    holder.tr.setBackgroundDrawable(getResources().getDrawable(R.drawable.abc));
    holder.backgroundChanged = true;
}