无法将PhoneWindow $ DecorView转换为TextView

时间:2013-12-24 10:58:44

标签: android

我正在尝试以编程方式将TextView添加到我的布局中。我希望这些TextView具有自定义样式,因此我将其放在res/layout/listitem_tpl.xml

<TextView xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="match_parent"
    android:textSize="25sp" >
</TextView>

盲目地关注this answer并且没有真正理解我在做什么,我把它放在我的onCreate中:

LayoutInflater inflater = LayoutInflater.from(this);
TextView text = (TextView) inflater.inflate(R.layout.listitem_tpl, (ViewGroup) getWindow().getDecorView().getRootView());
text.setText("Hello, World!");

我不知道第二个论点应该放什么。我知道我需要“父视图”,我认为这是我用setContentView设置的,但是没有getContentView所以我根据我通过谷歌搜索找到的一些信息将这个表达式合并在一起。那条线是问题吗?

无论如何,我得到的错误是:

12-24 11:52:12.370: E/AndroidRuntime(2677): Caused by: java.lang.ClassCastException: com.android.internal.policy.impl.PhoneWindow$DecorView cannot be cast to android.widget.Button

我查找了LayoutInflater.inflate,发现它应该返回一个View。 TextView是View的子类,所以问题出在哪里?

2 个答案:

答案 0 :(得分:0)

xml中有按钮

所以在Button

中输入它
LayoutInflater inflater = LayoutInflater.from(this);
Button text = (Button ) inflater.inflate(R.layout.listitem_tpl, (ViewGroup)getWindow().getDecorView().getRootView());
text.setText("Hello, World!");

修改

在inflate函数的第二个参数中,您应该传递此视图的父视图。

您可以传递null

TextView text = (TextView) inflater.inflate(R.layout.listitem_tpl, null);

并将其添加到父视图

或传递父视图的引用

答案 1 :(得分:0)

请使用:

 LayoutInflater inflater = LayoutInflater.from(this);
 TextView text = (TextView) inflater.inflate(R.layout.listitem_tpl, null);
  text.setText("Hello, World!");

膨胀方法

parameter 1: resource ID for an XML layout resource to load (e.g., R.layout.main_page)
root Optional view to be the parent of the generated hierarchy.

Returns:
The root View of the inflated hierarchy. If root was supplied, this is the root View; otherwise it is the root of the inflated XML file.