Невозможно добавить окно - токен ноль не для приложения из службы - PullRequest
0 голосов
/ 29 марта 2019

У меня есть приложение, основанное на 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);

        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...