我在我的Recyclerview
中使用Fragment
。我的RecyclerView有Adapter
类。我需要在AlertDialog
中用AdapterClass
显示我用{{ 1}}。但我收到错误
android.app.Activity无法应用于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);
}
这是适配器类的代码
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();
}
});
}
如何在此方法中显示对话框?
答案 0 :(得分:3)
您需要在Context
Activity
代替AlertDialog.Builder
public void noInternetAlert(Activity activity)
{
Context context = activity;
AlertDialog.Builder builder = new AlertDialog.Builder(context);
....
}
答案 1 :(得分:2)
只需使用 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();
}
});
答案 2 :(得分:2)
您已在适配器类中拥有上下文。您需要使用上下文来创建alertDialog。
首先删除此行
final AppCompatActivity activity=(AppCompatActivity)v.getContext();
然后在这里使用上下文。
final AlertDialog alertDialog=new AlertDialog.Builder(context).create();
final AlertDialog.Builder builder = new AlertDialog.Builder(context);
希望这会有所帮助。