如何根据每个项目中显示的数据更改列表项目的背景颜色?

2023-12-09

我在 SQLite 中有一个订单列表,其状态各不相同:已分配、已加载、已交付。我希望每个订单在列表中显示时都有不同的颜色背景。到目前为止,我还没有找到一个好的方法来做到这一点。

我发现了很多关于如何根据位置更改列表项的背景颜色的讨论,但没有一个是根据数据内容进行的。我还发现了很多关于如何更改用于突出显示所选项目的颜色的讨论。这些对我没有帮助。

我提出的解决问题的唯一方法包括在适配器创建列表后运行整个列表,并为每个项目设置背景。这是笨拙和浪费的。我希望有一种更有效的方法,可以在从光标创建列表时更改适配器中的背景。

我确信有更好的方法。我对 Android 还太陌生,不了解它。


我非常感谢迄今为止的回应。我正在尽力将它们纳入其中,但仍然没有成功。这是我刚刚尝试过的,基于我得到的答案和我所做的研究。

public class OrderListAdapter extends SimpleCursorAdapter {

    private static final String TAG = "SimpleCursorAdapter";
    Context _context = null;
    int layoutResourceId = 0;

    public OrderListAdapter(Context context, int layout, Cursor c,
            String[] from, int[] to, int flags) {
        super(context, layout, c, from, to, flags);
        _context = context;
    }

    public View getView(int position, View convertView, ViewGroup parent) {
        View view = super.getView(position, convertView, parent);
        String tag = TAG + ".getView()";
        Log.d(tag,"in getView()");

        if (view == null) {
            LayoutInflater inflater = ((Activity)_context).getLayoutInflater();
            view = inflater.inflate(R.layout.fragment_order_list_row, null);
        }
        setRowColor(view);
        return view;
    }

    private void setRowColor(View view) {
        String tag = TAG + ".setRowColor()";
        Cursor cursor = getCursor();
        int col = cursor
                .getColumnIndex(DBContract.DeliveryOrderTable.ENROUTE_FLAG);
        String enroute_flag = cursor.getString(col);
        Log.d(tag, "enroute_flag = [" + enroute_flag + "]");
        col = cursor
                .getColumnIndex(DBContract.DeliveryOrderTable.DELIVERED_DATETIME);
        String deliveredDateStr = cursor.getString(col);
        Log.d(tag, "deliveredDateStr = [" + deliveredDateStr + "]");
        int bgColorId = 0;
        if (!deliveredDateStr.equals("")) {
            bgColorId = R.color.bg_status_delivered_color;
            Log.d(tag, "Setting to delivered color");
        } else if (enroute_flag.startsWith("T") || enroute_flag.startsWith("Y")) {
            Log.d(tag, "Setting to enroute color");
            bgColorId = R.color.bg_status_enroute_color;
        } else {
            Log.d(tag, "Setting to assigned color");
            bgColorId = R.color.bg_status_assigned_color;
        }
        view.setBackgroundColor(_context.getResources().getColor(bgColorId));
    }
}

不幸的是,这不起作用。如果我不调用 super.getView(),显然,我会在字段中没有数据,因为我没有明确进行传输,但我认为我可以修改返回的视图。

我的痕迹显示我正在读取数据,但背景颜色没有改变。

看来我试图更改的视图是 LinearLayout,但更改背景颜色似乎不起作用。

知道了!确保所有子视图的背景都是透明的。


如果您正在为 listview 使用任何自定义适配器,那么您将有一个方法 getView() ,只需在返回之前调用一个方法,并根据您想要更改的颜色传递视图(正在返回)和数据排。

public View getView(int position, View convertView, ViewGroup parent) {
    // TODO Auto-generated method stub
    View view = convertView;
    if (view == null) {
        LayoutInflater vi = (LayoutInflater) _c.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        view = vi.inflate(R.layout.list_item_var, null);
    }

    TextView varView = (TextView) view.findViewById(R.id.var);
    TextView valueView = (TextView) view.findViewById(R.id.value);

    VarDetails var = _data.get(position);
    setRowColor(view, var.getVar());
    varView.setText(var.var);
    valueView.setText("Value: " + var.value);

    return view;
}
private void setRowColor(View view, String var) {
    if("assigned".equalsIgnoreCase(var)){
        view.setBackgroundColor(Color.rgb(255,0,0));
    }else if("loaded".equalsIgnoreCase(var)){
        view.setBackgroundColor(Color.rgb(0,255,0));
    }else if("delivered".equalsIgnoreCase(var)){
        view.setBackgroundColor(Color.rgb(0,0,255));
    }
}

请根据您的数据类型更改方法。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何根据每个项目中显示的数据更改列表项目的背景颜色? 的相关文章

随机推荐

  • 有没有办法在应用程序被杀死时在 flutter 中接收数据通知?

    我正在尝试在 android 中实现推送通知的自定义 ui 标题 正文 从 url 加载的图像 firebase messaging dart 插件在应用程序被终止时接收数据通知有限制 使用数据负载而不是通知负载是在 Android 中原生
  • Chmod 777 到文件夹和所有内容[重复]

    这个问题在这里已经有答案了 我有一个网络目录 www以及该目录中的一个名为store Within store是几个文件和文件夹 我想给文件夹store以及其中的所有文件和文件夹store文件夹所有权限 我该怎么做呢 我猜是通过 htacc
  • 套接字绑定不会返回 int

    我的代码片段如下所示 int descriptor socket AF INET SOCK STREAM 0 if descriptor lt 0 cerr lt lt Error establishing socket connectio
  • 使用 javascript 数组填充 html 表

    我想用一个 HTML 表格来填充JavaScript array 但是 它不起作用 我不知道为什么 我的 innerHTML 没有被解释 我的变量包含良好的值 但是当我这样做时 document getElementById title i
  • Bootstrap 3 中的字形图标未在 Firefox 上呈现

    我将 Bootstrap 3 用于 Web 应用程序 我的计算机 Chrome IE 和 Firefox 一切正常 但我的一位客户看不到字形图标 I first thought the problem was my css but the
  • 转换时区 pandas 数据框

    我有数据 Symbol bid ask Timestamp 2014 01 01 21 55 34 378000 EUR USD 1 37622 1 37693 2014 01 01 21 55 40 410000 EUR USD 1 37
  • GET 的表达参数长度限制

    我有一个 Nodejs 应用程序 我在其中使用 Express 来实现 REST API 其中一个 API 接受 SQL 查询 在数据库上运行它并返回 JSON 响应 一切都工作正常 直到我使用长 SQL 查询测试 api 在调试时 我注意
  • 如何在 GWT 中公开类功能

    我有一个用 Java 编写的类库 想将其转换为 Javascript 所有方法都非常简单 并且主要与操作集合有关 我有一个类 GameControl 我可以实例化它 并且我希望将其方法暴露给页面上的其他 Javascript 代码 我想到使
  • SERVER_ERROR:[代码] 1675030 [消息]:执行查询时出错

    我在 Android 中使用 Facebook 登录 Code callbackManager CallbackManager Factory create LoginButton loginButton LoginButton this
  • Windows IoT - Zebra 蓝牙打印机

    我有两台 Zebra 蓝牙打印机 MZ220 和 iMZ220 我 唯一 要做的事情就是在 Raspberry Pi 2 上使用 Windows IoT 系统打印文本 仅此而已 例子 1号线 Hello World Line2 Line3
  • NetBeans:JasperReport 异常

    我正在开发一个需要Jasper报告的项目 我使用下面提到的代码片段在NetBeans 6 1中查看报告 该报告最初是使用iReport 3 6 0生成和编译的 我的要求是使用打印此报告一个简单的 Swing 应用程序 代码片段 public
  • 在 android 中,在 recyclerView 中准确显示按钮所在位置的弹出窗口

    I m working on a gridLayout with recyclerView in android I ve a an option with each grid Item where I want to show my po
  • iOS 在另一个项目中使用现有项目的类/资源文件

    我在 App Store 中有一个 iPhone 应用程序的现有 xCode 项目 该项目包含许多视图控制器 视图 XIB 文件 图像 等 我希望创建另一个项目 其行为方式完全相同 包含相同的控制器 视图 图像 等 除了我希望更改一些小东西
  • 如果 JSF 不支持,为什么我能够将 绑定到任意方法?

    我正在使用 Glassfish 3 1 2 2 和 JSF Mojarra 2 1 6 我有以下 Facelets 页面
  • 为什么消息打印两次?

    我正在为 C 创建一个简单的 Tic Tac Toe 这是一个我遇到问题的特定函数 这应该让用户选择 X 或 O 并且对于大多数艺术来说它都有效 但是 如果我输入错误的符号 它会打印以下语句 无效符号 请重新输入 两次 Why and ho
  • 如何从网页上使用关联程序打开本地文件?

    我知道我的应用程序的用户有一个名为 c sourcefile cs 的本地文件 我需要找到一种方法来呈现该文件的链接 以便当他单击该链接时 它将在 Visual Studio 中打开该文件 这是供我们开发团队内部使用的 因此如果没有标准方法
  • 复制省略可见副作用

    考虑这段代码 include
  • 将图像存储到 sqlite 数据库中

    下面是我在 sqlite 数据库中存储图像的代码 当我用它来存储值时它可以工作 现在我尝试将图像存储在 sqlite 数据库中 我不知道我做错了什么 我已经搜索过 但无法得到我需要的答案 任何人都可以帮我解决他的代码 sqlite3 dat
  • UITableView 静态单元格作为子视图?

    使用 iOS 5 中的 Storyboard 我将 uitableview 添加到具有静态单元格的现有视图控制器中 但是当我运行该应用程序时 表格视图不会显示 视图上的其他所有内容都加载良好 如何在常规视图控制器上将带有静态单元格的 uit
  • 如何根据每个项目中显示的数据更改列表项目的背景颜色?

    我在 SQLite 中有一个订单列表 其状态各不相同 已分配 已加载 已交付 我希望每个订单在列表中显示时都有不同的颜色背景 到目前为止 我还没有找到一个好的方法来做到这一点 我发现了很多关于如何根据位置更改列表项的背景颜色的讨论 但没有一