0

У меня есть адаптер, который распространяется ArrayAdapter. С этим классом адаптера я управляю ListView внутри MainActivity.
У меня также есть несколько кнопок внутри каждой строки списка, и когда я нажимаю на кнопку, я хочу показать AlertDialog. При этом я получил ошибку около Theme.
Я читал об изменении темы внутри моего манифеста, но она не работает, даже если я меняюсь.AlertDialog и ArrayAdapter

holder.delete=(ImageButton)row.findViewById(R.id.delete_btn_item); 
     holder.delete.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 

       AlertDialog.Builder dialog= new AlertDialog.Builder(getContext()); 
       dialog.setTitle("Deleting..."); 
       dialog.setMessage("You are deleting DEFINITELY <" + db.getAllRecipes().get(position).getRec_name() + ">. Are you sure to continue?"); 
       dialog.setNeutralButton("Cancel", new DialogInterface.OnClickListener() { 
        @Override 
        public void onClick(DialogInterface dialog, int which) { 
         dialog.dismiss(); 
        } 
       }); 
       dialog.setPositiveButton("Continue", new DialogInterface.OnClickListener() { 
        @Override 
        public void onClick(DialogInterface dialog, int which) { 
         db.deleteRecipe(db.getAllRecipes().get(position)); 
         dialog.dismiss(); 
         Toast.makeText(getContext(), "deleted " + db.getAllRecipes().get(position).getRec_name(), Toast.LENGTH_SHORT).show(); 
        } 
       }); 
       dialog.create(); 
       dialog.show(); 
      } 
     }); 

У меня есть держатель внутри метода getView. Мои первые строки кода являются:

public class RecipeAdapter extends ArrayAdapter { 
DatabaseHelper db; 
LayoutInflater layoutInflater; 
private Context context; 
PopupWindow popUpWndw; 


List list= new ArrayList(); 
public RecipeAdapter(Context context, int resource) { 
    super(context, resource); 
    this.context = context; 
    db=new DatabaseHelper(context.getApplicationContext()); 
} 

Ошибка я получаю это:

java.lang.IllegalStateException: You need to use a Theme.AppCompat theme (or descendant) with this activity. 
+0

попробуйте изменить 'AlertDialog.Builder dialog = new AlertDialog.Builder (getContext());' to 'AlertDialog.Builder dialog = new AlertDialog.Builder (context)'; –

+0

Кажется, вы смешиваете классы библиотеки поддержки со стандартным. Убедитесь, что ваша активность и диалоги совпадают. – fasteque

+0

Не могли бы вы показать нам свой 'AndroidManifest.xml',' style.xml' и журнал ошибок. –

ответ

0

Вам нужно добавить android:theme="@style/Theme.AppCompat.Light" к применению тега в файле AndroidManifest.xml.

0

проходить mainactivitycontext к пользовательскому адаптер и использовать это context создать alertdialog

yourAdaptor(this); // this is mainactivity context 

YourAdaptor

private Context mContext; 

    public yourAdaptor(Context context){ 
    mContext = context; 
    } 

    AlertDialog.Builder dialog= new AlertDialog.Builder(mContext); 

Update ::

просто передать свой глобальный контекст экземпляр адаптер.

AlertDialog.Builder dialog= new AlertDialog.Builder(context); 
+1

Я вижу, что он уже передает контекст в 'Adapter'. (' Private Context context; ') –

+1

Вы правы @ PhanVănLinh. ohk, поэтому он должен использовать только этот контекст. – KDeogharkar

0

Использование ниже тема для этой деятельности в вашем menifest файла

android:theme="@style/Theme.AppCompat.Light" 
0

Вы проходящие контекст для класса адаптера через конструктор и он будет сохранен в переменном «контексте» .so использование контекст вместо getcontext(). Это сработало для меня. Я думаю, это поможет вам.

holder.delete.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View v) { 

      AlertDialog.Builder dialog= new AlertDialog.Builder(context); 
      dialog.setTitle("Deleting..."); 
      dialog.setMessage("You are deleting DEFINITELY <" + db.getAllRecipes().get(position).getRec_name() + ">. Are you sure to continue?"); 
      dialog.setNeutralButton("Cancel", new DialogInterface.OnClickListener() { 
       @Override 
       public void onClick(DialogInterface dialog, int which) { 
        dialog.dismiss(); 
       } 
      }); 
      dialog.setPositiveButton("Continue", new DialogInterface.OnClickListener() { 
       @Override 
       public void onClick(DialogInterface dialog, int which) { 
        db.deleteRecipe(db.getAllRecipes().get(position)); 
        dialog.dismiss(); 
        Toast.makeText(context, "deleted " + db.getAllRecipes().get(position).getRec_name(), Toast.LENGTH_SHORT).show(); 
       } 
      }); 
      dialog.create(); 
      dialog.show(); 
     } 
    }); 
0

изменить ваш style.xml с ниже код: -

значения

"styles.xml"

<resources> 

    <style name="AppTheme" parent="Theme.AppCompat.NoActionBar"> 
     <!-- Customize your theme here. --> 
    </style> 
</resources> 

AndroidManifest.xml

<activity 
    android:name="com.package name.your activity" 
    android:theme="@style/AppTheme"> 
</activity>