使用RelativeLayout我正在尝试创建一个自定义ViewGroup,它将添加到Activity中的ScrollView中。我创建了以下类来创建ViewGroup。
public class MessageView extends RelativeLayout implements MessageType {
View mView;
public TextView messageText;
public MessageView(Context context, int type) {
super(context);
MAX_LINE = getResources().getInteger(R.integer.MAX_LINE);
LayoutInflater inflater = (LayoutInflater) context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
if (type == MESSAGEFROM) {
inflater.inflate(R.layout.message_layout_from, this, true);
} else {
inflater.inflate(R.layout.message_layout_to, this, true);
}
}
@Override
public void onFinishInflate() {
Log.d("MessageView", "Finished Inflation");
super.onFinishInflate();
addView(mView, 0);
messageText = (TextView) findViewById(R.id.messageText);
}
public void setText(String s) {
this.messageText.setText(s);
}
在主要活动中,我正在创建新的MessageView,如下所示
MessageView a = new MessageView(getApplicationContext(), MESSAGEFROM);
a.setText(message);
chatRoom.addView(a);
但onFinishInflate()
方法从未调用,我在nullPointerException
收到a.setText(message)
错误。如果在构造函数MessageView()
中使用了以下行,则会得到同样的错误。
messageText = (TextView) findViewById(R.id.messageText);
答案 0 :(得分:0)
我认为问题是RelativeLayout不知道如何找到textview。我假设你的文本视图来自膨胀的xml文件。所以我说使用存储对膨胀视图的引用然后使用findViewById
在代码中,
View inflated = inflater.inflate(R.layout.message_layout_from, this, true);
messageText = (TextView) inflated.findViewById(R.id.messageText);
该ID通常在布局XML文件中分配,但您采用了不同的方法(扩展RelativeLayout)