如何在列表适配器上显示AlertDialog

时间:2016-06-10 21:22:18

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

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

我编写了以下代码,将数据传递给List Adapter

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

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

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

  

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();

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

2 个答案:

答案 0 :(得分:3)

这是由您传入 AlertDialog.Builder 上下文引起的。

在这一行:

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

替换

context

[YourActivityName].this

答案 1 :(得分:0)

正确的陈述可能是这样的:

select *

您编写的代码无法正常工作,因为默认主题不是主题的适当后代,警报对话框需要对其进行实例化。