0

我正在使用 for 循环以编程方式添加 TextViews,并使用 setId(Int int) 为该特定 Textview 设置唯一 ID。但现在我想根据那个 id 搜索 textView。我该如何搜索?

发生错误“应用程序意外停止...”这是我的代码。

public class Idtest extends Activity {
    TextView tv;
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        LinearLayout ll=new LinearLayout(this);
        tv=new TextView(this);

        tv.setText("Hello");
        ll.addView(tv);

        tv=new TextView(this);
        tv=(TextView)ll.getChildAt(1);

        setContentView(tv);


    }
}
4

3 回答 3

2

tv显然null在最后(LinearLayout只有一个孩子,在 index 0),所以你基本上是在调用setContentView(null)这会导致异常。我不清楚您要做什么(您的代码很混乱)。

假设您试图TextView在 a 中显示多个 s LinearLayout,这是我的建议:

public class Idtest extends Activity {
    LinearLayout mainLayout;
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        mainLayout = new LinearLayout(this);
        setContentView(mainLayout);

        for (int i=0; i < 10; i++) {
            TextView tv = new TextView(this);
            tv.setText("Hello " + i);
            mainLayout.addView(tv);
        }
    }
}

如果在以后的任何时候,您需要其中一个TextView,请执行以下操作:

TextView tvX = mainLayout.getChildAt(X); // where X is between 0 and 9

另外,请注意,从代码创建布局是邪恶的。如果你能避免它,请做。例如,如果TextViews 的数量是动态的,那么从代码中创建它们是完全正常的(尽管您可以对它们进行膨胀)。但是,不建议同时创建LinearLayoutfrom 代码。您应该在 XML 中拥有它。如果您也可以TextView在 XML 中包含 s,那就更好了。

于 2011-03-08T09:42:27.067 回答
1

还有另一种选择……我们有setTag()方法getTag()。在添加一个文本视图时,给它一个标签,每当你想进行搜索时,使用 getTag()。

于 2011-03-08T06:20:43.300 回答
1

我想您正在将 TextView 控件添加到某些 ViewGroup(例如 LInearLayout)?

您可以使用 getChildCount() / getChildAt(index) 遍历 ViewGroup 子视图,并将子视图 ID 与您正在搜索的视图进行比较。

于 2011-03-08T07:01:23.953 回答