【问题标题】:change ListView row colors based on TextView in item根据项目中的 TextView 更改 ListView 行颜色
【发布时间】:2013-12-03 00:00:40
【问题描述】:

大家晚上好,

制作一个简单的预算应用程序,当它是成本时想要行的红色背景,当它是收入时想要绿色背景。让列表视图正常工作,现在只需深入研究颜色。已经想出在点击时更改行颜色,但现在希望对行进行“初始”着色。 (这是我的第一个应用,所以还在学习)

我已经尝试过 - 自定义 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);

只要我调用启动更改的简单适配器的函数,两者都会使程序崩溃。我没有尝试同时调用两者。我尝试了扩展课程,然后尝试了活页夹。代码中有明显的错误吗?我一直在尝试调整多种不同的东西以使其正常工作(例如Change color of an item in ListView with SimpleAdapter

感谢您的帮助!一直很感激

【问题讨论】:

  • 崩溃日志说什么?请提供堆栈跟踪。
  • 第一个错误(但之后继续)是 4 Span_Exclusive_Exclusive - 跨度不能有零长度)。然后是致命异常:main、java.lang.NullPointerException,然后是大量的 at...错误。 NullPointerException 正下方的一个位于 com.example.simplebudget.RC_Adapter.getView(RC_Adapter.java:28)

标签: android listview colors row simpleadapter


【解决方案1】:

如果不查看日志,我可以假设您收到的是NullPointerExceptionconvertView 将为空,因为您需要首先通过调用 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; 
}

【讨论】:

  • 我得到的第一个错误是 FATAL EXCEPTION: main 然后是 NullPointerException (然后它列出了所有没有触发的东西)。我用视图尝试了你的修改,但我仍然遇到同样的错误。
  • 您可以忽略的跨度错误。现在只关心异常。您可以发布您的布局和 nullpointerexception 堆栈跟踪吗?
  • 列表视图的布局是:
  • 是的,我试图回答我自己的问题,所以原文没有那么长。一旦好的,将所有的垃圾编辑出来,然后给出一个简洁的答案。感谢大家的帮助
  • 刚刚逐行浏览代码。我忘记将 .setBackground... 更改为查看而不是 convertView。一切正常,运行良好!谢谢您的帮助。试图投票但不让我...
猜你喜欢
  • 2021-06-15
  • 2020-07-10
  • 2020-12-03
  • 2023-03-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-27
  • 2012-07-01
相关资源
最近更新 更多