【问题标题】:How to display AlertDialog on List Adapter如何在列表适配器上显示 AlertDialog
【发布时间】:2016-10-11 23:00:52
【问题描述】:

ContactsDataList 是一个数组列表,包含所有联系人的数据。

我编写了以下将数据传递给列表适配器的代码

adapter= new ContactsAdapter(getApplicationContext(), contactsDataList);
listView = (ListView) findViewById(R.id.lv_contacts);
listView.setAdapter(adapter);

在列表视图中,每当用户单击列表中的任何项目时,我都想启动 Call_Action 事件。

我在适配器中编写了以下代码,但它给了我这个错误消息

java.lang.IllegalStateException: 你需要使用 Theme.AppCompat 此活动的主题(或后代)。

contactsHeading.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(final View v) {

        AlertDialog alertDialog = new AlertDialog.Builder(context).create();
        alertDialog.setTitle("Alert");
        alertDialog.setMessage("Are you sure you want to call "+contactsHeading + "?"  );
        alertDialog.setButton(AlertDialog.BUTTON_POSITIVE, "OK",
                new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int which) {
                        Intent intent = new Intent(Intent.ACTION_CALL, Uri.parse("tel:" + contactsText));
                        if (ActivityCompat.checkSelfPermission(v.getContext(), Manifest.permission.CALL_PHONE) != PackageManager.PERMISSION_GRANTED) {

                            return;
                        }
                        v.getContext().startActivity(intent);
                    }
                });
        alertDialog.setButton(AlertDialog.BUTTON_NEGATIVE, "Cancel",
                new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int which) {

                        dialog.dismiss();
                    }
                });
        alertDialog.show();

请指导我如何解决此错误消息。

【问题讨论】:

  • 您应该将 AlertDialog 的创建逻辑从您的适配器移动到您的活动(或任何具有新 ContactsAdapter 引用的 android 组件)并让它们通过适配器内的侦听器进行通信,因为某些生命周期事件可能导致它崩溃(所有对话框都应该隐藏在onPause())。从那里您应该将您的活动作为AlertDialog.Builder 构造函数参数传递,它应该可以工作。

标签: java android listview android-studio android-arrayadapter


【解决方案1】:

这是由您传递给 AlertDialog.BuilderContext 引起的。

在这一行:

AlertDialog alertDialog = new AlertDialog.Builder(context).create();

替换

context

[YourActivityName].this

【讨论】:

  • 当我写这个新的AlertDialog.Builder(ContactsActivity.this).create();..它给了我以下错误消息ContactsActivity is not an enclosing class
  • ContactsActivity 当前来自什么?它应该扩展一个 Activity 类。
  • 它派生自 AppCompactActivity
  • 应该没错。您的 ListAdapter 是否包含在您的活动中?如果没有,请尝试将其嵌套在您的 Activity 下。
  • 谢谢,我将 getApplicationContext 而不是 this 传递给我的适配器构造函数。它现在工作。非常感谢 ! :)
猜你喜欢
  • 2021-11-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-02
  • 1970-01-01
相关资源
最近更新 更多