Android Studio - 具有多列和不同外观的Listview

时间:2017-02-05 14:39:27

标签: android listview background textview

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

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

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

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

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

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

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

非常感谢。

编辑 - 添加ListView2适配器代码

如上所述,如果条件满足,我可以更改特定textview的背景,但是即使条件视图中的其他行没有满足条件,这也会发生在整个列中。

@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;
}

1 个答案:

答案 0 :(得分:0)

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