根据项目中的TextView更改ListView行颜色

时间:2013-12-03 00:00:40

标签: android listview colors row simpleadapter

晚上所有人,

制作一个简单的预算应用,并且当它是成本时想要行的红色背景,当它是收入时想要绿色背景。让listview工作和一切,现在只是深入研究颜色。已经想出了点击更改行颜色,但现在想要对行进行“初始”着色。 (这是我的第一个应用程序,所以仍然非常学习)

我试过 - 自定义SimpleAdapter包装器:

public class RC_Adapter extends SimpleAdapter {
Context contextpass;

public RC_Adapter(Context context, List<? extends Map<String, ?>> data,
        int resource, String[] from, int[] to) {
    super(context, data, resource, from, to);
    contextpass = context;
    // TODO Auto-generated constructor stub
}
@Override
public View getView(int position,View convertView,ViewGroup parent){
    TextView tv = (TextView) convertView.findViewById(R.id.c1);
    String s = tv.getText().toString();
    if(s.equals("Cost")){
        convertView.setBackgroundResource(R.color.valencia_red);}
    else{
        convertView.setBackgroundResource(R.color.t_green);
    }
    return convertView; 
}
}

实施:

RC_Adapter sd=new RC_Adapter(this,arrCosts,R.layout.costlist,
                         new String[]{"id","desc","cost"},
                         new int[]{R.id.c1,R.id.c2,R.id.c3});

我也尝试过:

SimpleAdapter.ViewBinder binder = new SimpleAdapter.ViewBinder() {

        @Override
        public boolean setViewValue(View view, Object data,
                String textRepresentation) {
            // TODO Auto-generated method stub
            TextView tv = (TextView) view.findViewById(R.id.c1);
            String s = tv.getText().toString();
            if(s.equals("Cost")){
                view.setBackgroundResource(R.color.valencia_red);}
            else{
                view.setBackgroundResource(R.color.t_green);
            }
            return false;
        }
    };
    sd.setViewBinder(binder);

一旦我调用启动已更改的simpleadapters的函数,两者都会崩溃程序。我没有尝试过同时打电话。我尝试了扩展类,然后我尝试了绑定器。代码中是否有明显的错误?我一直在努力调整多种不同的东西以使其发挥作用(如Change color of an item in ListView with SimpleAdapter

感谢您的帮助!永远赞赏

1 个答案:

答案 0 :(得分:1)

如果不查看日志,我可以假设您获得了NullPointerExceptionconvertView将为null,因为您需要先调用super.getView来创建视图。一旦你获得了视图(让父母膨胀或转换)你可以改变它。

@Override
public View getView(int position,View convertView,ViewGroup parent){
    View view = super.getView(position, convertView, parent);
    TextView tv = (TextView) view.findViewById(R.id.c1);
    // TODO: Add null checks
    String s = tv.getText().toString();
    if(s.equals("Cost")){
        view.setBackgroundResource(R.color.valencia_red);}
    else{
        view.setBackgroundResource(R.color.t_green);
    }
    return view; 
}