0

我编写了代码来执行搜索并在 XML 文件中的搜索表单下方显示结果。

但是,通过动态创建 TextViews,它会不断添加更多 TextViews,因此每次执行搜索时,TextViews 的数量都会增加 5。如何重新使用 TextViews,以便更新要显示的文本而不是创建更多 TextViews?

for(int i=0; i<5; i++) {

    TextView altName = new TextView(getApplicationContext());

    altName.setText("blah");
    altName.setLayoutParams(new TableRow.LayoutParams(1));
    altName.setTextAppearance(getApplicationContext(), R.style.textSize);

    TableRow altNameTr = new TableRow(getApplicationContext());
    altNameTr.addView(altName);
    table.addView(altNameTr);
}
4

3 回答 3

1

1.当您动态创建 TextView时,使用方法为它们分配id 。 setId(int i)

2.在任何你需要的地方重用TextView ..ids

于 2012-07-26T18:37:15.473 回答
1

你需要做的是:

  1. 在搜索之前,您创建 TextViews 并将它们添加到表中。不要忘记存储它们(ArrayList<TextView>可以正常工作)

  2. 每次获得搜索结果时,请浏览您的 TextViews 列表并相应地更新它们(使用setText()

所以你的代码应该像:

public class Search
{
    ArrayList<TextView> results = new ArrayList<TextView>();

    public void init(Context context)
    {
        TableRow altNameTr = new TableRow(context);
        TextView tv;

        for(int i=0; i<5; i++)
        {
            tv = new TextView(context);
            results.add(tv);
            altNameTr.addView(tv);
        }
        table.addView(altNameTr);
    }

    public void fillSearchResults()
    {
        for(int i=0; i<results.size(); i++) 
        {
            results.get(i).setText("Whatever you need to set here"); 
        }
    }
}
于 2012-07-26T18:42:07.110 回答
1

在作为第一行的函数中,您可以添加table.removeAllViews(). 这样,在执行新搜索之前,您的表总是会被清除。

如果你总是有 5 个结果,那么最好使用 Pavel Dudka 的方法 :)

于 2012-07-26T18:57:08.577 回答