好的,我无法弄清楚这一点.. 这是我想要做的:
我在操作栏中有一个图标 - 当我点击它时会膨胀带有自定义布局文件的对话框。此布局包含EditText
和Button
。整个过程的目的是编写电子邮件,然后在单击时通过按钮发送。但是当我点击按钮时,我得到一个Nullpoint exception
..
以下是一些代码:
@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>
那么我做错了什么呢?我无法解决这个问题,我已经查看了其他示例并在官方文档中阅读了示例,但是......真糟糕。
答案 0 :(得分:0)
Dialog
也有setContentView(View)
,因此您可以对视图进行充气并转移到Dialog
充气视图。您还可以使用膨胀的视图来查找onClickListener
目的所需的视图。我的猜测是视图不是Dialog视图层次结构的一部分,直到它在屏幕上可见。
所以我会说
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(...);
答案 1 :(得分:0)
使用
EditText messageText = (EditText) messageDialog.findViewById(R.id.edit_text_message);
而不是
EditText messageText = (EditText) findViewById(R.id.edit_text_message);