将自定义子RelativeLayout添加到Activity中的ScrollView中

时间:2014-12-21 06:34:54

标签: android android-layout android-scrollview android-viewgroup

使用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);

1 个答案:

答案 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)