Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/webpack/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何在操作栏的自定义对话框中设置自定义按钮单击侦听器?_Android_Xml - Fatal编程技术网

Android 如何在操作栏的自定义对话框中设置自定义按钮单击侦听器?

Android 如何在操作栏的自定义对话框中设置自定义按钮单击侦听器?,android,xml,Android,Xml,好吧,我想不出这个。。 以下是我试图做的: 我有一个图标在行动栏-当我点击它膨胀与自定义布局文件对话框。此布局有一个编辑文本和一个按钮。整个过程的目的是编写电子消息,然后在单击时通过按钮发送。但是当我点击按钮时,我得到一个空点异常 下面是一些代码: @Override public boolean onOptionsItemSelected(MenuItem item) { int itemId = item.getItemId(); switch (itemId) {

好吧,我想不出这个。。 以下是我试图做的:

我有一个图标在行动栏-当我点击它膨胀与自定义布局文件对话框。此布局有一个
编辑文本
和一个
按钮
。整个过程的目的是编写电子消息,然后在单击时通过按钮发送。但是当我点击按钮时,我得到一个
空点异常

下面是一些代码:

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    int itemId = item.getItemId();

    switch (itemId) {
        case R.id.action_logout:
            navigateToLogin();
            break;
        case R.id.action_edit_friends:
            Intent intent = new Intent(this, EditFriendsActivity.class);
            startActivity(intent);
            break;
        case R.id.action_message:
            Dialog messageDialog = new Dialog(this);
            messageDialog.setContentView(R.layout.message_bar);
            messageDialog.show();
            Button messageButton = (Button)messageDialog.findViewById(R.id.send_button);
            messageButton.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    EditText messageText = (EditText) findViewById(R.id.edit_text_message);
                    if (TextUtils.isEmpty(messageText.getText())) {
                        Toast.makeText(MainActivity.this, "Enter a message first!", Toast.LENGTH_SHORT).show();
                    } else {
                        String message = messageText.getText().toString();
                        Intent recipientsIntent = new Intent(MainActivity.this, RecipientsActivity.class);
                        recipientsIntent.putExtra("Text", message);
                        startActivity(recipientsIntent);
                    }
                }
            });
            break;
    }
    return super.onOptionsItemSelected(item);
}
对话框的自定义布局文件如下所示:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <RelativeLayout
        android:id="@+id/structured_relative_interaction"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:gravity="bottom">

        <EditText
            android:id="@+id/edit_text_message"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_alignParentLeft="true"
            android:layout_margin="5dp"
            android:layout_toLeftOf="@+id/send_button"
            android:gravity="bottom"
            android:hint="@string/send_message_hint"
            android:inputType="textCapSentences|textMultiLine"
            android:maxLines="15"
            android:padding="10dp" />

        <Button
            android:id="@+id/send_button"
            android:layout_width="40dp"
            android:layout_height="40dp"
            android:layout_alignBottom="@id/edit_text_message"
            android:layout_alignParentRight="true"
            android:background="@drawable/ic_launcher"/>
    </RelativeLayout>
</RelativeLayout>


那么我做错了什么呢?我无法回避这个问题,我已经看了其他例子并阅读了官方文档中的例子,但是。。。糟糕透了

对话框
还具有
设置内容视图(视图)
,因此您可以展开视图并将展开的视图传递到
对话框
。您还可以使用膨胀视图来查找
onClickListener
用途所需的视图。我的猜测是,只有当视图在屏幕上可见时,它才是对话框视图层次结构的一部分

所以我要说

View view = LayoutInflater.from(MainActivity.this).inflate(R.layout.message_bar, null);
messageDialog.setContentView(view);
View messageButton = view.findViewById(R.id.send_button);
messageButton.setOnClickListener(...);
使用

而不是


EditText messageText=(EditText)findViewById(R.id.edit\u text\u message)

编辑文本是自定义对话框的一部分,而不是主布局。所以你应该调用自定义对话框的findviewbyid,就像你为button所做的那样。是的,就是这样。。我不知道我怎么会错过:)花一个小时看:)谢谢!很高兴我能帮忙。祝你好运:)
EditText messageText = (EditText) messageDialog.findViewById(R.id.edit_text_message);