1

我想在单击按钮后打开一个自定义对话框。XML中按钮的代码为:

<Button
            android:id="@+id/Button1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginLeft="@dimen/BorderMargin"
            android:layout_marginRight="@dimen/BorderMargin"
            android:background="#D2D2D2"
            android:onClick="openDialog1"
            android:padding="17dip"
            android:text="@string/ButtonAdd" />

点击后,按钮打开方法“openDialog1”:

public void openDialog1(View view) {

    final Dialog dialog = new Dialog(this.getApplicationContext());
    dialog.setContentView(R.layout.dialogbrand_layout);
    dialog.setTitle("Hello");

    TextView textViewUser = new TextView(getApplicationContext());
    textViewUser = (TextView) findViewById(R.id.textBrand);
    textViewUser.setText("Hi");

    dialog.show();
}

我尝试执行此操作,但 textViewUser.setText 上的应用程序崩溃

有任何想法吗?

4

4 回答 4

4

您可以findViewById 设置为活动的当前视图层次结构。

在您的情况下,您应该使用活动上下文并使用对话框对象来初始化 textview。

您还可以删除 final 修饰符。

public void openDialog1(View view) {
Dialog dialog = new Dialog(ActivityName.this);
dialog.setContentView(R.layout.dialogbrand_layout);
dialog.setTitle("Hello");
TextView textViewUser = (TextView) dialog.findViewById(R.id.textBrand);
textViewUser.setText("Hi");
dialog.show();
}

何时调用活动上下文或应用程序上下文?

检查上面的链接和 commomsware 的答案,以了解何时使用活动上下文或应用程序上下文。

于 2013-06-14T08:57:36.387 回答
0

Waqas 是对的,但此外,您使用在您的视图层次结构中找到的实例覆盖textViewUser您以编程方式创建的:“ ”:“ ”。textViewUser = new TextView(getApplicationContext());textViewUser = (TextView) findViewById(R.id.textBrand);

似乎textViewUser是空的。您是否尝试从视图中获取此 TextView dialogbrand_layout?如果是,则可以确定您textViewUser为 null,因为此 TextView 不在您当前的视图层次结构中。

于 2013-06-14T08:52:53.947 回答
0

您确定 textBrand textview 是否在您为活动设置的 contentView 内。

 textViewUser = (TextView) findViewById(R.id.textBrand);

findViewById 调用返回 null。如果 R.layout.dialogbrand_layout 有 textBrand textview 然后将上面的行替换为

 textViewUser = (TextView)dialog.findViewById(R.id.textBrand);
于 2013-06-14T08:54:20.890 回答
0

您不应该使用应用程序的上下文来创建对话框/视图。

改变:

final Dialog dialog = new Dialog(this.getApplicationContext());

对此:

final Dialog dialog = new Dialog(view.getContext());
//or
final Dialog dialog = new Dialog(this);   //'this' refers to your Activity
于 2013-06-14T08:42:33.387 回答