android - 遍历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++;
}
}
}
解决方案
在循环中构建警报对话框不是一个好主意。相反,创建一个并在按钮单击时更新列表中每个元素的值。覆盖对话框的 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()
}
推荐阅读
- java - Java 日历中的前一天不正确
- perl - how do parsing DynamicWebsite data
- postgresql - ALTERING MULTIPLE TABLES IN POSTGRES
- autohotkey - 在循环中无法执行任何其他操作
- sql - 如何使用 SQL 获取特定字符串值下的行
- instagram - Instagram API:如何获得 1440 像素?
- c# - 正则表达式非捕获组捕获
- swift - 如何处理返回值的函数的错误
- php - 使用 PHP 和 MySQL 创建动态列表
- python - 如果我从函数中更改 Python 全局变量的数据,则会引发错误。(如果不传递任何参数,它工作正常)