无法在非 Activity、RecyclerView 适配器 Class 中显示对话框

Not able to show Dialog box in Non Activity, RecyclerView Adapter Class

我在 Fragment 中使用 Recyclerview。我有 Adapter class 因为我的 RecyclerView.I 需要在其中显示 AlertDialog我在 AdapterClass 中编写的方法。但是我收到一个错误

android.app.Activity cannot be applied to android.content.Context.

这是我的 AlertClass

的代码
public class AlertClass {

        public void noInternetAlert(Activity activity)
        {
            final AlertDialog alertDialog=new AlertDialog.Builder(activity).create();
            AlertDialog.Builder builder=new AlertDialog.Builder(activity);
            builder.setTitle("No Internet Connection");
            builder.setMessage("You need to have Mobile data or Wifi to access this.");
            builder.setPositiveButton("Ok", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    alertDialog.cancel();
                }
            });
            builder.show();
        }
}  

这是我在 AdapterClass

中的方法的代码
private void free() {
        AlertClass alert=new AlertClass();
        alert.noInternetAlert(context);
           }  

这是适配器的代码 Class

public class BusyAdapter extends RecyclerView.Adapter<BusyAdapter.ViewHolder>
{
    private FragmentManager fm;
    private FragmentTransaction tx;
    private String myToken,name,join,description,id;
    private ArrayList<BusyEntry> entry;
    Context context;
    public BusyAdapter(ArrayList<BusyEntry> entry,Context context)
    {
        this.entry = entry;
        this.context = context;
    }
    @Override
    public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
         View v= LayoutInflater.from(parent.getContext()).inflate(R.layout.busy_card,parent,false);
         return  new ViewHolder(v);
    }

    @Override
    public void onBindViewHolder(final ViewHolder holder, final int position) {
        final BusyEntry currentEntry=entry.get(position);
        holder.name.setText(currentEntry.getName());
        holder.description.setText(currentEntry.getDescription());
        holder.id.setText(currentEntry.getId());
        holder.itemView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                final int pos=holder.getAdapterPosition();
                 name=entry.get(position).getName();
                 join=entry.get(position).getJoin();
                description=entry.get(position).getDescription();
                 id=entry.get(position).getId();
                final AppCompatActivity activity=(AppCompatActivity)v.getContext();
                final AlertDialog alertDialog=new AlertDialog.Builder(activity).create();
                final AlertDialog.Builder builder = new AlertDialog.Builder(activity);
                builder.setTitle("Confirmation");
                builder.setMessage("Do you really want to Free?");
                builder.setPositiveButton("Yes", new DialogInterface.OnClickListener()
                {

                    @Override
                    public void onClick(DialogInterface dialog, int which)
                    {
                        free();
                        String chooseTab="";
                        ChooseTab chooseTab1=new ChooseTab();
                        fm=activity.getSupportFragmentManager();
                        Busy busy=new Busy();
                        tx=fm.beginTransaction();
                        tx.replace(R.id.frame,chooseTab1,chooseTab);
                        tx.detach(myentry);
                        tx.attach(myebtry);
                         entry.remove(pos);
                         notifyItemRemoved(pos);
                        tx.commit();
                    }
                });
                builder.setNegativeButton("No", new DialogInterface.OnClickListener()
                {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        alertDialog.cancel();
                    }
                });
                builder.show();
            }
        });

    }  

如何在该方法中显示对话框?

只需使用 v.getContext 像这样更改 AlertDialog.Builder alertDialog = new AlertDialog.Builder(v.getContext);

  holder.itemView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
         AlertDialog.Builder alertDialog = new AlertDialog.Builder(v.getContext);

        // Setting Dialog Title
        alertDialog.setTitle("Confirm Delete...");

        // Setting Dialog Message
        alertDialog.setMessage("Are you sure you want delete this?");

        // Setting Icon to Dialog
        alertDialog.setIcon(R.drawable.delete);

        // Setting Positive "Yes" Button
        alertDialog.setPositiveButton("YES", new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog,int which) {

                        free();
                        String chooseTab="";
                        ChooseTab chooseTab1=new ChooseTab();
                        fm=activity.getSupportFragmentManager();
                        Busy busy=new Busy();
                        tx=fm.beginTransaction();
                        tx.replace(R.id.frame,chooseTab1,chooseTab);
                        tx.detach(myentry);
                        tx.attach(myebtry);
                         entry.remove(pos);
                         notifyItemRemoved(pos);
                        tx.commit();
            }
        });

        // Setting Negative "NO" Button
        alertDialog.setNegativeButton("NO", new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int which) {
            // Write your code here to invoke NO event

            dialog.cancel();
            }
        });

        // Showing Alert Message
        alertDialog.show();
      }
});

您需要在 AlertDialog.Builder

中使用 Context 而不是 Activity
public void noInternetAlert(Activity activity)
{
    Context context = activity;
    AlertDialog.Builder builder = new AlertDialog.Builder(context);
    ....
}

您已经在适配器中有了上下文 class。您需要使用上下文来创建 alertDialog。

先去掉这一行

final AppCompatActivity activity=(AppCompatActivity)v.getContext();

然后在这里使用上下文。

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

希望这会有所帮助。