从其他活动发送时无法设置editview ID

时间:2015-01-21 11:28:17

标签: android

感谢大家为这个问题留出时间。    当我从另一个Activity调用appendToMessageHistory方法时,我需要附加一个editview。     第二个活动

    EditText et;
    Messaging msg = new Messaging(getApplicationContext(), et);
    msg.appendToMessageHistory(username, messegestr);

关于消息传递活动。

private EditText messageHistoryText;
messageHistoryText = (EditText) findViewById(R.id.messageHistory);

private Context mCon;

    public Messaging(Context applicationContext, EditText name) {
        // TODO Auto-generated constructor stub

        this.mCon = applicationContext;
        this.messageHistoryText = name;
    }

public Messaging() {

    }//by default constructor  

public void appendToMessageHistorysend(String username, String message) {
        if (username != null && message != null) {

            if (messageHistoryText != null) {
                                messageHistoryText.append(Html
                                        .fromHtml(username1));
                                messageHistoryText.append(Html
                                        .fromHtml(message1));
                            }

                            else {
                                Toast.makeText(mCon,
                                        "hey yo not working value are null",
                                        Toast.LENGTH_LONG).show();
                            }
                }

            }

        }
    }

我仍然为messageHistoryText获取null。 和应用程序崩溃 再次感谢你的时间

2 个答案:

答案 0 :(得分:0)

在你的第一段代码中:

EditText et;
Messaging msg = new Messaging(getApplicationContext(), et);
msg.appendToMessageHistory(username, messegestr);

对象“et”未初始化...如果您尝试访问它,它将崩溃。

答案 1 :(得分:0)

活动生命周期由Android框架管理。在Activity中编写自定义构造函数是一个很大的错误(覆盖现有的构造函数是一些非常罕见的情况)。

在为Android开发时,不应该在自己的代码中调用Activity构造函数。当我说从不我的意思是从不!!!

要实例化一个活动:你必须使用Intent并让Android完成这项工作。

在编码之前,请务必了解Android activity life-cycle

准确回答您的问题:

在自定义构造函数中使用它时,

messageHistoryText为null,因为您的活动Messaging在初始化时不包含任何视图。 如果在设置Activity的内容之前调用它,方法findViewById将始终返回null(无论id是什么)。

设置活动内容的最常用方法是使用setContentView方法调用Activity.onCreate()(但>调用super.onCreate(bundle)之后 否则你的活动将不会准备好来设置它的内容)