У меня есть приложение, основанное на RecyclerView, состоящее из CardView. Я бы хотел, чтобы при нажатии на представление карты отображалось диалоговое окно с предупреждением, но когда я настраивал onClickListener и нажимал на представление карты, приложение вылетало, и я получаю эту ошибку: Невозможно добавить окно - токен ноль не для приложения из службы .
(То же самое происходит с диалогом прогресса).
Вместо этого, если в onclick я установил тост, я не получаю никакой ошибки.
Это код:
holder.cardView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
AlertDialog.Builder builder=new AlertDialog.Builder(context);
builder.setTitle("Description");
LinearLayout layout=new LinearLayout(context);
TextView text=new TextView(context);
layout.addView(text);
builder.setView(layout);
builder.setCancelable(true);
AlertDialog alertDialog=builder.create();
alertDialog.show();
}
});
Это код полного класса MyAdapter:
public class MyAdapter extends RecyclerView.Adapter<MyAdapter.ViewHolder> {
private List<Film> listItems;
private Context context;
public MyAdapter(List<Film> listItems, Context context) {
this.listItems = listItems;
this.context = context;
}
@NonNull
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View v = LayoutInflater.from(parent.getContext())
.inflate(R.layout.view_layout, parent, false);
return new ViewHolder(v);
}
@Override
public void onBindViewHolder(@NonNull final ViewHolder holder, final int position) {
final Film listItem = listItems.get(position);
holder.textViewName.setText(listItem.getName());
holder.textViewCategory.setText(listItem.getCategory());
holder.textViewYear.setText(""+listItem.getYear());
holder.textViewDirection.setText(listItem.getDirection());
Picasso.with(context).load(listItem.getUrl()).into(holder.imageView);
holder.cardView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
AlertDialog.Builder builder=new AlertDialog.Builder(context);
builder.setTitle("Description");
LinearLayout layout=new LinearLayout(context);
TextView text=new TextView(context);
layout.addView(text);
builder.setView(layout);
builder.setCancelable(true);
AlertDialog alertDialog=builder.create();
alertDialog.show();
}
});
}
@Override
public int getItemCount() {
return listItems.size();
}
public class ViewHolder extends RecyclerView.ViewHolder {
public TextView textViewName;
public TextView textViewCategory;
public TextView textViewYear;
public TextView textViewDirection;
public ImageView imageView;
public CardView cardView;
public ViewHolder(@NonNull View itemView) {
super(itemView);
textViewName = (TextView) itemView.findViewById(R.id.name);
textViewCategory = (TextView) itemView.findViewById(R.id.category);
textViewYear = (TextView) itemView.findViewById(R.id.year);
textViewDirection=(TextView) itemView.findViewById(R.id.direction);
imageView = (ImageView) itemView.findViewById(R.id.playbill);
cardView=(CardView) itemView.findViewById(R.id.cardView);
}
}
}