【发布时间】:2018-04-24 06:06:28
【问题描述】:
我在我的Fragment 中使用Recyclerview。我的RecyclerView 有Adapter 类。我需要以我在AdapterClass 中编写的一种方法显示AlertDialog。但我收到一个错误,因为
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();
}
});
}
如何在这个方法中显示对话框?
【问题讨论】:
-
尝试使用构造函数的上下文。无需使用最终的 AppCompatActivity activity=(AppCompatActivity)v.getContext(); .你已经有了上下文。
标签: android android-fragments android-recyclerview android-context android-dialog