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

2023-12-11

我有一个 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;
  }
}

public class MonitorObject {
  private int mTimeTotal;
  private int mWarningThreshold;
  private int mAlarmThreshold;`enter code here`
  private boolean mWarning;
  private boolean mAlarm;

  public MonitorObject(int timeTotal, int warningThreshold, int alarmThreshold) {
    this.mTimeTotal = timeTotal;
    this.mWarningThreshold = warningThreshold;
    this.mAlarmThreshold = alarmThreshold;  
    mWarning = (mTimeTotal > mWarningThreshold) ? true : false;
    mAlarm = (mTimeTotal > mAlarmThreshold) ? true : false;
  }
  /*getters, setters, tostring goes here*/
}

我在 commonsware.com 上的“The Busy Coder's Guide to Android Development”的免费摘录中找到了关于如何执行此操作的精彩教程。还请查看Google I/O 2010 - ListView 的世界在 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;
  }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android ListActivity 基于对象状态的行颜色 的相关文章

随机推荐

  • 为 Node.js 应用程序构建 docker 映像在代理后面失败

    我在 docker 构建期间遇到了 npm 问题 我是一家公司代理的幕后黑手 阅读了大约 30 篇解决类似问题的文章 以及 stackoverflow 帖子 然而我仍然无法克服这一点 我能够 npm install 项目并在 docker
  • Google Apps 脚本停止从雅虎财经抓取数据

    用于从雅虎财经抓取历史数据的 Google Apps 脚本代码昨天停止工作 它突然给出错误 没有数据 data length 0 我认为错误出现在获取 JSON 时的第 8 行脚本中 但我没有必要的技能来修复它 如果您能帮助解决问题 我们将
  • 将数据框重塑为宽形状

    数据包含两个变量 id 和grade 每个id可以有多个记录 每个年级 dat lt data frame id c 1 1 1 2 2 2 2 3 3 4 5 5 5 grade c a b c a a b b d f c a e f 我
  • phpunit 无法在全新安装的 laravel 5.7 上运行

    我新安装的 Laravel 遇到问题 当我尝试使用时phpunit运行默认命令ExampleTest php 我懂了error D Laravel Rahimi0151 gt phpunit PHP Warning continue tar
  • Maven - 测试中的不同依赖版本

    我遇到了类似的问题Maven 2 测试和编译中的不同依赖版本但那里指定的答案不起作用 在我的项目中 我需要依赖 Hadoop 的 Cloudera 发行版和用于 JUnit 测试的 vanilla 版本 因为前者仅适用于 nix 当我尝试执
  • 根据给定的开放日期和关闭日期,生成一段时间内开放门票的计数

    我有一些门票的一组数据 其中datetime它们打开和关闭的时间 或NULL如果它们仍然开放 opened on closed on 2019 09 01 17 00 2020 01 01 13 37 2020 04 14 11 00 20
  • 使用Java本机接口时如何解决“致命:重定位仍然针对可分配但不可写的部分”?

    我正在尝试在 Java 代码中调用 C 函数 我有这个哈瓦代码 public class JavaToC public native void helloC static System loadLibrary HelloWorld publ
  • Eclipse 和 Spring Beans 的 EL 自动完成/代码辅助

    在 Eclipse 中 JSF EL 的自动完成功能仅适用于旧版 ManagedBean或 CDI 豆 Named 至少在使用 JBoss 工具插件时是这样 也可以看看 使用 Eclipse 的 Facelets 中的 EL 建议 自动完成
  • 将组的最大值分配给该组中的所有行

    我想将一个组的最大值分配给该组内的所有行 我怎么做 我有一个数据框 其中包含组的名称以及属于该组的最大学分数 course credits lt aggregate bsc academic Credits by list bsc acad
  • Android 4.3:如何连接多个蓝牙低功耗设备

    我的问题是 Android 4 3 客户端 可以与多个 BLE 设备 服务器 建立活动连接吗 如果是这样 我怎样才能实现它 到目前为止我做了什么 我尝试评估使用 BLE 和 Android 4 3 BLE API 可以实现的吞吐量 此外 我
  • 防止在 Windows 窗体中打开组合框控件的下拉区域

    我在 Windows 窗体中有一个自定义组合框控件 我想实现一个功能 其中根据某些条件不应显示下拉区域 即我需要防止组合框根据某些条件打开 我找到了一个可以实现此目的的链接 但它完全阻止了下拉区域的显示 我也无法根据自己的方便调整该方法 链
  • 通过忽略div标签javascript的内部元素来选择文本

  • pyodbc和ms access 2010连接错误

    如何使用 pyodbc 访问我的 Microsoft Access 2010 数据库 accdb 之前 我使用了 mdb 数据库 它在连接字符串为 ODBC CONN STR DRIVER Microsoft Access Driver m
  • 预引导加载屏幕

    我正在寻找一个预引导加载屏幕 类似于这个例子但对于 Angular 2 来说 我可以建议一种简单的 CSS 方法 首先添加 loadingdiv 到主 HTML 页面中 它应该遵循主应用程序组件元素 例如
  • JavaScript 拖放

    我正在寻找有人解释如何在 javascript 中拖放 我想要一条水平线 其中包含一些可自定义的图像 我看过这些的在线教程 但发现它们很难使用 我建议您研究一下 Javascript 框架之一 我们用原型与剧本 您可以在 Scriptacu
  • 如何在android中加载BufferedImage?

    我要加载BufferedImage在我的应用程序中 为此我正在使用ImageIO但我越来越java lang NoClassDefFoundError BufferedImage tgtImg loadImage ImageD2 jpg p
  • Google Apps 脚本仅在一次迭代后就停止了

    我在谷歌应用程序脚本中有一个小函数 必须在 for 循环中执行一些操作 即我有 3 行 其中包含一些值 对于每一行 我必须更新一张表 但不幸的是 我不明白为什么 但在仅仅一个之后循环程序停止了 并且没有return声明 这是代码 funct
  • 在 SwiftUI 中根据浅色或深色模式更改按钮样式修饰符

    我想设置自定义buttonStyle明暗模式按钮的修饰符 如何根据浅色或深色模式更改buttonStyle Modifier 我想为浅色和深色模式的按钮设置自定义修饰符 这是我的按钮代码 Button action print button
  • 从 R 中的数据框创建词云

    我制作了一个示例数据框 我尝试从 项目 栏制作一个词云 Hours lt c 2 3 4 2 1 1 3 Project lt c a b b a c c c Period lt c 2014 11 22 2014 11 23 2014 1
  • Android ListActivity 基于对象状态的行颜色

    我有一个 ListActivity 显示列表中的一堆对象 我想根据 MonitorObject 中两个布尔值的状态更改行的背景和文本颜色 我需要扩展 ArrayAdapter 吗 如果是这样 代码示例将不胜感激 因为我已经尝试了几天但没有成