重新使用以编程方式创建的Textviews

时间:2012-07-26 18:32:50

标签: java android

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

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

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

3 个答案:

答案 0 :(得分:1)

1。当您动态动态地创建时,使用 setId(int i) 方法将 ID分配给他们。

<强> 2。无论何时需要,都可以使用 ids 重复使用TextView ..

答案 1 :(得分:1)

您需要做的是:

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

  2. 每次有搜索结果时,请浏览TextViews列表并相应更新(使用setText()

  3. 所以你的代码应该是:

    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"); 
            }
        }
    }
    

答案 2 :(得分:1)

在您的第一行功能中,您可以添加table.removeAllViews()。 这样,在执行新搜索之前,您的表始终会被清除。

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