【问题标题】:Android Studio - Listview with multiple columns and different appearanceAndroid Studio - 具有多列和不同外观的 Listview
【发布时间】:2017-02-05 14:39:26
【问题描述】:

我正在使用带有两个来自 SQLite 的单独表的数据库,我的 CRUD 操作运行良好。然后我在同一个活动上显示两个列表视图,一个在另一个之上,这也可以正常工作。总之,我遵循了以下步骤:

  • 我创建了两个对象类,每个类都有自己的 getter/setter。每个对象类都被赋予了一个来自 SQLite 的表。 SQLite 中的每个表都有 5 列和多行
  • 我创建了两个自定义适配器,每个列表视图一个
  • 我为显示两个列表视图的活动创建了 xml 布局;每个列表视图也有一个带有文本视图的行布局。

每个列表视图有 6 列。第一列是列表视图中项目/行的位置,其他 5 列包含 SQLite 中各个表中的值。

如果我此时运行应用程序,一切都很完美,我可以看到两个列表视图在另一个之上,显示来自 SQLite 表的数据。

现在我想将 listview2 中的值与 listview1 中的值进行比较。例如,如果 listview2 中 position1/row1、column2 的 textview 与 listview1 中的任何项目相同,则该特定 textview 应该具有不同的背景。

我设法比较了这些值并设置了背景。问题是,如果满足条件并且我从 listview2、position1/row1、column2 设置 textview 的背景,则背景将在 listview2 的整个 column2 上自动更改。

那么如何根据条件以编程方式更改单个文本视图的背景,而不影响同一列表视图中其他行/列的任何其他文本视图?

非常感谢。

编辑 - 添加 ListView2 适配器代码

如前所述,如果满足条件,我可以更改特定文本视图的背景,但是即使列表视图中的其他行不满足条件,整列也会发生这种情况。

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

    ObjectSaved objectSaved = getItem(position);

    if(convertView == null) {
        convertView = LayoutInflater.from(getContext()).inflate(R.layout.row_layout, parent, false);
    }

    TextView ID_fav = (TextView) convertView.findViewById(R.id.id_favorit);
    TextView N1_fav = (TextView) convertView.findViewById(R.id.n1_fav);
    TextView N2_fav = (TextView) convertView.findViewById(R.id.n2_fav);
    TextView N3_fav = (TextView) convertView.findViewById(R.id.n3_fav);
    TextView N4_fav = (TextView) convertView.findViewById(R.id.n4_fav);
    TextView N5_fav = (TextView) convertView.findViewById(R.id.n5_fav);
    TextView N6_fav = (TextView) convertView.findViewById(R.id.n6_fav);

    // Setting the text to display
    ID_fav.setText(position + 1 + ".");
    N1_fav.setText(ObjectSaved.N1_fav);
    N2_fav.setText(ObjectSaved.N2_fav);
    N3_fav.setText(ObjectSaved.N3_fav);
    N4_fav.setText(ObjectSaved.N4_fav);
    N5_fav.setText(ObjectSaved.N5_fav);
    N6_fav.setText(ObjectSaved.N6_fav);

    DatabaseAccess databaseAccess = DatabaseAccess.getInstance(getContext());
    databaseAccess.open();
    ArrayList<ObjectDrawingLine> Result = databaseAccess.getSingle(id);
    All_Fav = databaseAccess.getAllFav();
    databaseAccess.close();

    // We're initialising our custom adapter with all our data from the database
    AdapterListView1 adapterExt = new AdapterListView1(getContext(), Result);

    for (position = 0; position < All_Fav.size(); position++) {
        String checkN1Fav = getItem(position).getN1_fav();
        String checkN2Fav = getItem(position).getN2_fav();
        String checkN3Fav = getItem(position).getN3_fav();
        String checkN4Fav = getItem(position).getN4_fav();
        String checkN5Fav = getItem(position).getN5_fav();
        String checkN6Fav = getItem(position).getN6_fav();

        String checkN1Ext =  adapterExt.getItem(0).getN1Ext();
        String checkN2Ext =  adapterExt.getItem(0).getN2Ext();
        String checkN3Ext =  adapterExt.getItem(0).getN3Ext();
        String checkN4Ext =  adapterExt.getItem(0).getN4Ext();
        String checkN5Ext =  adapterExt.getItem(0).getN5Ext();
        String checkN6Ext =  adapterExt.getItem(0).getN6Ext();

        if (checkN1Ext.equals(checkN1Fav) ||
                checkN2Ext.equals(checkN1Fav) ||
                checkN3Ext.equals(checkN1Fav) ||
                checkN4Ext.equals(checkN1Fav) ||
                checkN5Ext.equals(checkN1Fav) ||
                checkN6Ext.equals(checkN1Fav)) {
            N1_fav.setBackgroundResource(R.drawable.ball_circle);
        }
        if (checkN1Ext.equals(checkN2Fav) ||
                checkN2Ext.equals(checkN2Fav) ||
                checkN3Ext.equals(checkN2Fav) ||
                checkN4Ext.equals(checkN2Fav) ||
                checkN5Ext.equals(checkN2Fav) ||
                checkN6Ext.equals(checkN2Fav)) {
            N2_fav.setBackgroundResource(R.drawable.ball_circle);
        }
        if (checkN1Ext.equals(checkN3Fav) ||
                checkN2Ext.equals(checkN3Fav) ||
                checkN3Ext.equals(checkN3Fav) ||
                checkN4Ext.equals(checkN3Fav) ||
                checkN5Ext.equals(checkN3Fav) ||
                checkN6Ext.equals(checkN3Fav)) {
            N3_fav.setBackgroundResource(R.drawable.ball_circle);
        }
        if (checkN1Ext.equals(checkN4Fav) ||
                checkN2Ext.equals(checkN4Fav) ||
                checkN3Ext.equals(checkN4Fav) ||
                checkN4Ext.equals(checkN4Fav) ||
                checkN5Ext.equals(checkN4Fav) ||
                checkN6Ext.equals(checkN4Fav)) {
            N4_fav.setBackgroundResource(R.drawable.ball_circle);
        }
        if (checkN1Ext.equals(checkN5Fav) ||
                checkN2Ext.equals(checkN5Fav) ||
                checkN3Ext.equals(checkN5Fav) ||
                checkN4Ext.equals(checkN5Fav) ||
                checkN5Ext.equals(checkN5Fav) ||
                checkN6Ext.equals(checkN5Fav)) {
            N5_fav.setBackgroundResource(R.drawable.ball_circle);
        }
        if (checkN1Ext.equals(checkN6Fav) ||
                checkN2Ext.equals(checkN6Fav) ||
                checkN3Ext.equals(checkN6Fav) ||
                checkN4Ext.equals(checkN6Fav) ||
                checkN5Ext.equals(checkN6Fav) ||
                checkN6Ext.equals(checkN6Fav)) {
            N6_fav.setBackgroundResource(R.drawable.ball_circle);
        }
    }

    return convertView;
}

【问题讨论】:

    标签: android listview background textview


    【解决方案1】:

    没有代码有点难,但也许你必须为 textview 设置默认背景,而不是假设有不同的背景。

    【讨论】:

    • 所以你说我应该在 textview 的行布局中设置一个默认背景,这些背景不应该有不同的背景。我认为这行不通,因为我不知道哪个应该有默认值,哪个不应该。它取决于 SQLite 中的数据,这些数据基于 CRUD 操作(添加更多数据、删除等)而发生变化。我可以提供代码,但解决方案需要哪一部分?
    • 我假设您正在更改 getView 方法中的背景。创建视图时,请尝试 if (backgroundChange) something else default ... 并尝试在原始问题中发布 getview 方法
    • 我在原问题中添加了getview方法,再次感谢
    • 嗯,请检查 if 条件...checkN2Ext.equals(checkN1Fav) 是否存在多次。
    • 刚试过,但没有任何改变。从我的角度来看,这不起作用的原因是:如果我们以 N1_fav 为例,首先我们从行布局中附加 convertView.findViewById(R.id.n1_fav) 。其次,假设满足 if 条件,我们将背景更改为 N1_fav ,这样每行都会发生这种情况,即使其他行不满足条件。我不知道如何改变这种行为。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-17
    • 1970-01-01
    • 2016-07-29
    • 2013-12-18
    • 1970-01-01
    • 2011-02-13
    相关资源
    最近更新 更多