ContactsDataList
은 모든 연락처의 데이터가 들어있는 배열 목록입니다. 내가 데이터를 목록보기에목록 어댑터에서 AlertDialog를 표시하는 방법
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' 참조가있는)로 옮기고 일부 라이프 사이클 이벤트로 인해 충돌이 발생할 수 있으므로 어댑터 내부의 리스너를 통해 통신하도록해야합니다 모든 대화 상자는'onPause()'에 숨겨져 있어야합니다). 거기에서 당신은 당신의 활동을'AlertDialog.Builder' 생성자 매개 변수로 전달해야합니다. – EricDS