0

在我的 android 应用程序用户中,仅在列表视图中选择一项,并且该特定项目的文本视图颜色已更改。如果用户在列表视图中选择其他项目上一个项目颜色设置为默认值我使用以下方法在用户选择时重置所有文本视图颜色但是当滚动随机文本颜色改变时请如果您有任何其他解决方案来解决这个问题

lv.setOnItemClickListener(new OnItemClickListener() {

        @Override
        public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
                long arg3) {

但 getchildcount 方法仅返回当前显示项 textview :-(

                for(int i=0;i<lv.getChildCount();i++)
                {
                    Log.i("text",((TextView)((LinearLayout)lv.getChildAt(i)).findViewById(R.id.TruckNumber)).getText()+"");
            ((TextView)((LinearLayout)lv.getChildAt(i)).findViewById(R.id.TruckNumber)).setTextColor(Color.LTGRAY);
                }
                ((TextView)((LinearLayout)arg1).findViewById(R.id.TruckNumber)).setTextColor(Color.parseColor("#2a9bc8"));
                changeHeader(0);
                ((LinearLayout)lv.getChildAt(0)).refreshDrawableState();
        }   
    });

自定义适配器

公共类 Search_Truck_Number_adapter 扩展 BaseAdapter {

private static ArrayList<ListitemDetail> itemDetailarraylist;
private Context context=null;
        LayoutInflater inflater;
        ArrayList<TextView> TextViewObjects=new ArrayList<TextView>();
public Search_Truck_Number_adapter(ArrayList<ListitemDetail> result,Context c) {
    itemDetailarraylist=result;
    inflater = LayoutInflater.from(c);
    context=c;
}

@Override
public int getCount() {
    // TODO Auto-generated method stub
    return itemDetailarraylist.size();
}

@Override
public Object getItem(int arg0) {
    return itemDetailarraylist.get(arg0);
}

@Override
public long getItemId(int position) {
    // TODO Auto-generated method stub
    return position;
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    ViewHolder holder;
    if(convertView==null)
    {
        convertView = inflater.inflate(R.layout.search_act_cell,null);
        holder = new ViewHolder();
        holder.txt_itemName = (TextView)convertView.findViewById(R.id.TruckNumber);
        holder.position=position;
        convertView.setTag(holder);
    }
    else
    {
        holder = (ViewHolder) convertView.getTag();
    }
    TextViewObjects.add(holder.txt_itemName);
    holder.txt_itemName.setText(itemDetailarraylist.get(position).getName());
    return convertView;
}

static class ViewHolder{
    TextView txt_itemName;
    Integer position;
}

}

4

2 回答 2

1
public class Search_Truck_Number_adapter extends BaseAdapter implements OnClickListener
{
    private Integer no=null;

    private static ArrayList<ListitemDetail> itemDetailarraylist;
    private Context context=null;
            LayoutInflater inflater;
    public Search_Truck_Number_adapter(ArrayList<ListitemDetail> result,Context c) {
        itemDetailarraylist=result;
        inflater = LayoutInflater.from(c);
        context=c;
    }   
    @Override
    public int getCount() {
        // TODO Auto-generated method stub
        return itemDetailarraylist.size();
    }

    @Override
    public Object getItem(int arg0) {
        return itemDetailarraylist.get(arg0);
    }

    @Override
    public long getItemId(int position) {
        // TODO Auto-generated method stub
        return position;
    }
    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        ViewHolder holder;
        if(convertView==null)
        {
            convertView = inflater.inflate(R.layout.search_act_cell,null);
            holder = new ViewHolder();
            holder.txt_itemName = (TextView)convertView.findViewById(R.id.TruckNumber);
            holder.position=position;
            convertView.setOnClickListener(this);
            convertView.setTag(holder);
        }
        else
        {
            holder = (ViewHolder) convertView.getTag();
        }
        holder.position=position;
        holder.txt_itemName.setText(itemDetailarraylist.get(position).getName());
        if(no!=null)
        {
        if(no!=position)
        {
            holder.txt_itemName.setTextColor(Color.LTGRAY);
        }
        else
        {
            holder.txt_itemName.setTextColor(Color.parseColor("#2a9bc8"));
        }
        }
        return convertView;
    }

     static class ViewHolder{
        TextView txt_itemName;
        Integer position;
        Integer Select_Position;
    }

    @Override
    public void onClick(View v) {
        SearchActivity sa=new SearchActivity();
        sa.changeHeader(0, context);
      ListView lv=(ListView) v.getParent();
      for(int i=0;i<lv.getChildCount();i++)
      {
         ((TextView)((LinearLayout)lv.getChildAt(i)).findViewById(R.id.TruckNumber)).setTextColor(Color.LTGRAY); 
      }
        no=((ViewHolder)v.getTag()).position;
        ((ViewHolder)v.getTag()).txt_itemName.setTextColor(Color.parseColor("#2a9bc8"));
        Log.i("Position", ((ViewHolder)v.getTag()).position+"");
    }
}
于 2013-07-04T05:40:20.100 回答
0

因为 getChildAt() 只对列表中显示在屏幕上的视图起作用,所以可以先调用 lv.getFirstVisiblePostion() (这是 ListView 间接扩展的 android.widget.AdapterView 类的一个方法(参见 android 中的 ListView开发者指导并查看继承树)),那么如果你知道视图相对于它在屏幕上的位置的索引,你可以将索引添加到getFirstVisiblePosition()的结果中,例如getFirstVisiblePosition() + index。这将为您提供视图相对于整个列表的位置,而不仅仅是屏幕上显示的内容。您可以使用它来更改文本颜色。 - 希望这可以帮助

于 2013-07-03T13:32:53.710 回答