0

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

친절 방법이 오류 메시지를 해결하는 저를 안내합니다.

+0

AlertDialog의 생성 로직을 어댑터에서 액티비티 (또는 새로운 'ContactsAdapter' 참조가있는)로 옮기고 일부 라이프 사이클 이벤트로 인해 충돌이 발생할 수 있으므로 어댑터 내부의 리스너를 통해 통신하도록해야합니다 모든 대화 상자는'onPause()'에 숨겨져 있어야합니다). 거기에서 당신은 당신의 활동을'AlertDialog.Builder' 생성자 매개 변수로 전달해야합니다. – EricDS

답변

2

AlertDialog.Builder으로 전달한 결과입니다. 이 라인에서

:

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

는 올바른 문은 다음과 수

context 

[YourActivityName].this 
+0

이 새 AlertDialog.Builder (ContactsActivity.this) .create();를 쓸 때 다음과 같은 오류 메시지가 표시됩니다. ContactsActivity는 둘러싼 클래스가 아닙니다. – Kirmani88

+1

ContactsActivity는 현재 어떤에서 파생 되었습니까? Activity 클래스를 확장해야합니다. – solosodium

+0

에서 파생 된 AppCompactActivity – Kirmani88

0

로 교체 :

AlertDialog alertDialog = new AlertDialog.Builder(context, android.support.v7.appcompat.R.style.AlertDialog_AppCompat_Light); 

기본 테마가 경고 대화 상자가 인스턴스화에 필요한 주제의 적절한 하위 항목이 아니기 때문에 작성한 코드가 작동하지 않습니다.

관련 문제