首页 > 解决方案 > 遍历arraylist并为数组列表中的每个项目显示警报对话框,然后在单击肯定按钮时移动到下一个项目

问题描述

我正在创建一个自动调用程序应用程序,其中我使用了一个从arrayList 获取数据的按钮,遍历arraylist 并询问每个元素的用户是否要进行下一次调用或暂停,为此我使用了警报对话框,但是循环没有在每个元素上暂停,它转到最后一个元素并显示该联系人号码的警报对话框。

  private List<ContactEntity> mContactsList = new ArrayList<>();
    private ContactEntity c;
    private int i = 0;

 public boolean onOptionsItemSelected(MenuItem item) {

        int id = item.getItemId();

        if (id == R.id.start_call) {
            Toast.makeText(this, "Call Started" + mContactsList.size(), Toast.LENGTH_LONG).show();
            startAutoCall();

        }

        return super.onOptionsItemSelected(item);
    }

 private void startAutoCall() {
        if (mContactsList.isEmpty()) {
            Toast.makeText(this, "Import Contacts ", Toast.LENGTH_LONG).show();
        } else {
            c = mContactsList.get(i);
            Intent intent = new Intent(Intent.ACTION_CALL);
            intent.setData(Uri.parse("tel:" + c.getPersonContactNumber()));
            startActivity(intent);

            while(i < mContactsList.size()){
                c = mContactsList.get(i);

                Log.d(TAG, "startAutoCall: " + c.getId());
                AlertDialog.Builder builder = new AlertDialog.Builder(this);
                builder.setTitle("Auto Dialer Start");


                builder.setPositiveButton("Ok", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        Toast.makeText(MainActivity.this, "hello", Toast.LENGTH_LONG).show();
                        Intent intent = new Intent(Intent.ACTION_CALL);
                        intent.setData(Uri.parse("tel:" + c.getPersonContactNumber()));
                        startActivity(intent);
                    }
                });

                AlertDialog dialog = builder.create();
                dialog.show();
                i++;

            }
        }

    }

标签: androidarraylistandroid-alertdialog

解决方案


在循环中构建警报对话框不是一个好主意。相反,创建一个并在按钮单击时更新列表中每个元素的值。覆盖对话框的 onClickListener 以便您可以更好地控制流程。

这是 kotlin 中的一个片段。

if(mContactList.isNotEmpty()){
    c = mContactList.get(i)
    val builder = AlertDialog.Builder(this)
    builder.setTitle("Auto Dialer Start")
    builder.setMessage("Your message here...")
    builder.setPositiveButton("OK", null)

    val dialog = builder.create()
    dialog.setOnShowListener{ dialogInterface->
        val btnOk = dialog.getButton(AlertDialog.BUTTON_POSITIVE)
        btnOk.setOnClickListener{
            //Your code here...

            if(i == mContactList.size-1){
                dialogInterface.dismiss()
            }else {
               i++
               c = mContactList.get(i)
            }
        }
    }
    dialog.show()
}

推荐阅读