Android:如何使findViewById(R.id.xxx)在从View类继承/扩展的类中工作?

时间:2011-10-11 10:21:28

标签: android class view android-activity

我有以下问题:我想在我的主要活动中添加自定义视图(custom_view.xml和关联的CustomView.java类)。

所以,我做了以下几点:

1)在我的主要活动中(链接到main.xml):

CustomView customView = new CustomView(this);
mainView.addView(customView);

2)在我的CustomView.java类中(我想链接到custom_view.xml):

public class CustomView extends View {

public CustomView(Context context)
{
super(context);

/* setContentView(R.layout.custom_view); This doesn't work here as I am in a class extending from and not from Activity */

TextView aTextView = (TextView) findViewById(R.id.aTextView); // returns null

///etc....
}

}

我的问题是aTextView保持等于null ...很明显,由于我的custom_view.xml没有链接到我的CustomView.java类。我该怎么做这个链接?的确,我尝试了setContentView(R.layout.custom_view);但它不起作用(编译错误),因为我的类从View类扩展而不是Activity类。

感谢您的帮助!!

3 个答案:

答案 0 :(得分:12)

如果我找到你,你正在尝试从layoutfile(R.layout.custom_view)构建自定义视图。您想从该布局文件中查找文本视图。是对的吗?

如果是这样,您需要使用上下文来扩充布局文件。然后你可以从布局文件中找到textview。

试试这个。

LayoutInflater inflater = (LayoutInflater) context
            .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View v = inflater.inflate(R.layout.custom_view, null);
TextView aTextView = (TextView) v.findViewById(R.id.aTextView);

答案 1 :(得分:1)

我建议你试试这个:

TextView aTextView = (TextView) ((Activity)this.getContext()).findViewById(R.id.aTextView);

它对我有用!!!

答案 2 :(得分:0)

尝试对customView进行充气。

其次,尝试(我假设aTextView id出现在侧面CustomView中)

TextView aTextView = (TextView) mainView.findViewById(R.id.aTextView);