Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/33.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
Java 基于对象状态的Android ListActivity行颜色_Java_Android_Listview_Android Arrayadapter - Fatal编程技术网

Java 基于对象状态的Android ListActivity行颜色

Java 基于对象状态的Android ListActivity行颜色,java,android,listview,android-arrayadapter,Java,Android,Listview,Android Arrayadapter,我有一个ListActivity,显示列表中的一组对象。我想根据MonitorObject中两个布尔值的状态更改行的背景和文本颜色 我需要扩展ArrayAdapter吗?如果是这样,我将非常感谢一个代码示例,因为我已经尝试了几天,但都没有成功 public class Lwm extends ListActivity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(saved

我有一个ListActivity,显示列表中的一组对象。我想根据MonitorObject中两个布尔值的状态更改行的背景和文本颜色

我需要扩展ArrayAdapter吗?如果是这样,我将非常感谢一个代码示例,因为我已经尝试了几天,但都没有成功

public class Lwm extends ListActivity {
  @Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.list);
    setListAdapter(new ArrayAdapter<MonitorObject>(this, R.layout.row, getMonitorObjects()));
  }

  private List<MonitorObject> getMonitorObjects() {
    List<MonitorObject> mos = new ArrayList<MonitorObject>();
    mos.add(new MonitorObject(15000, 20000, 25000));
    mos.add(new MonitorObject(15000, 14000, 18000));
    mos.add(new MonitorObject(15000, 12000, 14000));
    mos.add(new MonitorObject(100, 200, 250));
    mos.add(new MonitorObject(3000, 2500, 3500));
    return mos;
  }
}

我在commonware.com上的《忙碌的程序员Android开发指南》的免费摘录中找到了一篇关于如何做到这一点的很棒的教程。也可以访问youtube,它包含了很多有用的信息

基本上,我要做的不是创建一个自定义的ArrayAdapter并覆盖getView()。查看下面的代码

public class Lwm extends ListActivity {
  private TextView mSelection;
  private List<MonitorObject> mMonitorObjects;

  @Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    mMonitorObjects = getMonitorObjects();
    setContentView(R.layout.main);
    setListAdapter(new CustomAdapter());
    mSelection = (TextView)findViewById(R.id.selection);
  }

  @Override
  public void onListItemClick(ListView parent, View v, int position, long id){
    mSelection.setText("Selection length is: " + mMonitorObjects.get(position).toString().length());
  }

  private class CustomAdapter extends ArrayAdapter<MonitorObject> {
    CustomAdapter() {
      super(Lwm.this, R.layout.row, R.id.label, mMonitorObjects);
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {     
      View row = convertView;

      if (row == null) {
        // This gives us a View object back which, in reality, is our LinearLayout with 
        // an ImageView and a TextView, just as R.layout.row specifies.
        LayoutInflater inflater = getLayoutInflater();      
        row = inflater.inflate(R.layout.row, parent, false);
      }

      TextView label = (TextView) row.findViewById(R.id.label);
      label.setText(mMonitorObjects.get(position).toString());
      ImageView icon = (ImageView)row.findViewById(R.id.icon);

      MonitorObject mo = getMonitorObjects().get(position);

      if (mo.ismAlarm()) {
        icon.setImageResource(R.drawable.alarm);
        row.setBackgroundColor(Color.RED);
      } else if (mo.ismWarning()){
        icon.setImageResource(R.drawable.warning);
        row.setBackgroundColor(Color.YELLOW);
      } else {
        icon.setImageResource(R.drawable.ok);
        row.setBackgroundColor(Color.GREEN);
      }

      return row;       
    }
  }

  private List<MonitorObject> getMonitorObjects() {
    List<MonitorObject> mos = new ArrayList<MonitorObject>();
    mos.add(new MonitorObject(15000, 20000, 25000));
    mos.add(new MonitorObject(15000, 14000, 18000));
    mos.add(new MonitorObject(15000, 12000, 14000));
    mos.add(new MonitorObject(100, 200, 250));
    mos.add(new MonitorObject(3000, 2500, 3500));
    return mos;
  }
}
公共类Lwm扩展了ListActivity{ 私有文本视图mSelection; 私有列表对象; @凌驾 创建时的公共void(Bundle savedInstanceState){ super.onCreate(savedInstanceState); AmmonitorObjects=getMonitorObjects(); setContentView(R.layout.main); setListAdapter(新的CustomAdapter()); mSelection=(TextView)findViewById(R.id.selection); } @凌驾 public void onListItemClick(ListView父视图、视图v、整数位置、长id){ mSelection.setText(“选择长度为:”+monitorObjects.get(position.toString().length()); } 私有类CustomAdapter扩展了ArrayAdapter{ CustomAdapter(){ super(Lwm.this、R.layout.row、R.id.label、对象); } @凌驾 公共视图getView(int位置、视图转换视图、视图组父级){ 视图行=转换视图; if(行==null){ //这给了我们一个视图对象,它实际上是我们的线性布局 //一个ImageView和一个TextView,正如R.layout.row指定的那样。 LayoutInflater充气机=getLayoutInflater(); 行=充气机。充气(R.layout.row,父级,false); } TextView标签=(TextView)row.findViewById(R.id.label); label.setText(monitorObjects.get(position.toString()); ImageView图标=(ImageView)row.findViewById(R.id.icon); MonitorObject mo=getMonitorObjects().get(位置); if(mo.ismAlarm()){ icon.setImageResource(R.drawable.alarm); 行.背景色(颜色.红色); }else if(mo.ismWarning()){ icon.setImageResource(R.drawable.warning); 行.背景色(颜色.黄色); }否则{ icon.setImageResource(R.drawable.ok); row.setBackgroundColor(颜色为绿色); } 返回行; } } 私有列表getMonitorObjects(){ List mos=new ArrayList(); 增加(新的监视器对象(15000、20000、25000)); 增加(新的监视器对象(15000、14000、18000)); 增加(新的监视器对象(15000、12000、14000)); 添加(新监视器对象(100200250)); mos.添加(新监视器对象(3000025003500)); 返回mos; } }
public class Lwm extends ListActivity {
  private TextView mSelection;
  private List<MonitorObject> mMonitorObjects;

  @Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    mMonitorObjects = getMonitorObjects();
    setContentView(R.layout.main);
    setListAdapter(new CustomAdapter());
    mSelection = (TextView)findViewById(R.id.selection);
  }

  @Override
  public void onListItemClick(ListView parent, View v, int position, long id){
    mSelection.setText("Selection length is: " + mMonitorObjects.get(position).toString().length());
  }

  private class CustomAdapter extends ArrayAdapter<MonitorObject> {
    CustomAdapter() {
      super(Lwm.this, R.layout.row, R.id.label, mMonitorObjects);
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {     
      View row = convertView;

      if (row == null) {
        // This gives us a View object back which, in reality, is our LinearLayout with 
        // an ImageView and a TextView, just as R.layout.row specifies.
        LayoutInflater inflater = getLayoutInflater();      
        row = inflater.inflate(R.layout.row, parent, false);
      }

      TextView label = (TextView) row.findViewById(R.id.label);
      label.setText(mMonitorObjects.get(position).toString());
      ImageView icon = (ImageView)row.findViewById(R.id.icon);

      MonitorObject mo = getMonitorObjects().get(position);

      if (mo.ismAlarm()) {
        icon.setImageResource(R.drawable.alarm);
        row.setBackgroundColor(Color.RED);
      } else if (mo.ismWarning()){
        icon.setImageResource(R.drawable.warning);
        row.setBackgroundColor(Color.YELLOW);
      } else {
        icon.setImageResource(R.drawable.ok);
        row.setBackgroundColor(Color.GREEN);
      }

      return row;       
    }
  }

  private List<MonitorObject> getMonitorObjects() {
    List<MonitorObject> mos = new ArrayList<MonitorObject>();
    mos.add(new MonitorObject(15000, 20000, 25000));
    mos.add(new MonitorObject(15000, 14000, 18000));
    mos.add(new MonitorObject(15000, 12000, 14000));
    mos.add(new MonitorObject(100, 200, 250));
    mos.add(new MonitorObject(3000, 2500, 3500));
    return mos;
  }
}