有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java在Android Studio中使用while循环显示包含textview对象的数据

所以我在安卓工作室工作,用Java作为我的语言,我有一个嵌入式数据库。我想按一下我的应用程序上的一些按钮,以显示在那个时间点我的数据库中的所有内容。让我们假设我的数据库包含字母数字组合,例如“A,45”,“B,57”等

现在,要在我的应用程序中显示此数据,我将使用以下方法:

LinearLayout my_layout = (LinearLayout)findViewById(R.id.mainView);

    Cursor c = dbase.query("SELECT letter, number from database");

    while (c.moveToNext()){
        TextView t = new TextView(this);
        t.setText(c.getString(c.getColumnIndex("letter"))+","+c.getLong(c.getColumnIndex("number")));
        my_layout.addView(t);
    }
    c.close();

现在,当我第一次按下应用程序上的按钮时,可以很好地显示我的数据,但问题是后续按下时,已经显示的数据仍保留在屏幕上,最终屏幕空间耗尽

例如,按一下:

A,45
B,57

再次按下:

A,45
B,57
A,45
B,57

等等

如何修改循环,以便在每次按下新按钮时,屏幕的当前内容都被擦除?谢谢你的帮助


共 (1) 个答案

  1. # 1 楼答案

    可以在重新填充布局之前从布局中删除所有视图:

    LinearLayout my_layout = (LinearLayout)findViewById(R.id.mainView);
    my_layout.removeAllViews();
    
    Cursor c = dbase.query("SELECT letter, number from database");
    while (c.moveToNext()){
        TextView t = new TextView(this);
        t.setText(c.getString(c.getColumnIndex("letter"))+","+c.getLong(c.getColumnIndex("number")));
        my_layout.addView(t);
    }
    c.close();
    

    或者,如果布局中有其他视图,则使用列表存储生成的文本视图,每当单击按钮时,这些文本视图将被清除并重新填充
    因此,在活动类级别定义列表:

    List<TextView> list;
    

    并在onCreate()中初始化它:

    list = new ArrayList<>();
    

    然后修改您的侦听器,如下所示:

    LinearLayout my_layout = (LinearLayout) findViewById(R.id.mainView);
    for (TextView t : list) {
        my_layout.removeView(t);
    }
    list.clear();
    
    Cursor c = dbase.query("SELECT letter, number from database");
    while (c.moveToNext()){
        TextView t = new TextView(this);
        t.setText(c.getString(c.getColumnIndex("letter"))+","+c.getLong(c.getColumnIndex("number")));
        my_layout.addView(t);
        list.add(t);
    }
    c.close();