在androidstudio中使用while循环用textview对象显示数据

az31mfrm  于 2021-07-12  发布在  Java
关注(0)|答案(1)|浏览(442)

所以我在android工作室工作,用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

等等。
如何修改循环,以便每次按新键时屏幕上的当前内容都被删除?谢谢你的帮助。

ulmd4ohb

ulmd4ohb1#

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

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();

相关问题