Для вызова startActivity () вне контекста Activity требуется флаг FLAG_ACTIVITY_NEW_TASK.не мог решить - PullRequest
0 голосов
/ 23 февраля 2019

Я пробовал весь день, но не смог решить, пожалуйста, помогите мне экспортировать. Я не знаю, в чем именно проблема.Я новичок в разработке Android. Вот мой код кода проекта Android ниже: Я понятия не имею, что происходит, пожалуйста, проверьте это один раз, ребята.Спасибо огромное.

public class MyComicAdapter extends RecyclerView.Adapter<MyComicAdapter.MyViewHolder>

    Context context;
    List<Comic> comicList;
    LayoutInflater inflater;

    public MyComicAdapter(Context context, List<Comic> comicList) {
        this.context = context;
        this.comicList = comicList;
        inflater=LayoutInflater.from(context);
    }

    @NonNull
    @Override
    public MyViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {

        View itemView = inflater.inflate(R.layout.comic_item, viewGroup, false);
        return new MyViewHolder(itemView);
    }

    @Override
    public void onBindViewHolder(@NonNull MyViewHolder myViewHolder, final int i) {

        Picasso.get().load(comicList.get(i).Image).into(myViewHolder.comic_image);
        myViewHolder.comic_name.setText(comicList.get(i).Name);

        //Event

        myViewHolder.setRecyclerItemClickListener(new IRecyclerItemClickListener(){

            @Override
            public void onClick(View view, int position) {
                //save the comic selected
                Common.comicSelected = comicList.get(position);
                Intent intent = new Intent(Intent.ACTION_VIEW);
                intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                context.startActivity(new Intent(context,ChapterActivity.class));

            }
        });


    }

    @Override
    public int getItemCount() {
        return comicList.size();
    }

    public class MyViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {

        TextView comic_name;
        ImageView comic_image;

        IRecyclerItemClickListener recyclerItemClickListener;

        public void setRecyclerItemClickListener(IRecyclerItemClickListener recyclerItemClickListener) {
            this.recyclerItemClickListener = recyclerItemClickListener;
        }

        public MyViewHolder(@NonNull View itemView) {
            super(itemView);

            comic_image = itemView.findViewById(R.id.image_comic);
            comic_name = itemView.findViewById(R.id.comic_name);

            itemView.setOnClickListener(this);
        }

        @Override
        public void onClick(View view) {

            recyclerItemClickListener.onClick(view, getAdapterPosition());

Ответы [ 3 ]

0 голосов
/ 23 февраля 2019

Проблема в том, что вы делаете «новое намерение» дважды:

  • Однажды здесь: Intent intent = new Intent(Intent.ACTION_VIEW);
  • Второй раз здесь: context.startActivity(new Intent(context,ChapterActivity.class))

FLAG_ACTIVITY_NEW_TASK не устанавливается при запуске действия.Исправленная версия, в которой Intent создается только один раз, выглядит следующим образом:

Intent intent = new Intent(context, ChapterActivity.class))
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(intent);

Но ваша реальная проблема заключается в том, что вам нужно вызвать startActivity в контексте Activity.

getActivity().startActivity(new Intent(getActivity(), ChapterActivity.class));

Подробнее здесь: Как запустить действие из фрагмента?

То, что вы пытались сделать с FLAG_ACTIVITY_NEW_TASK, должно быть зарезервировано для редких случаев, например, когда вам нужно запустить действие из службы.Но нет необходимости или нежелательно устанавливать этот флаг при запуске Activity из контекста пользовательского интерфейса.

Вот почему предупреждения спрашивают:

Это действительно то, что вы хотите?

Установка специализированных флагов при запуске действия часто приводит к нежелательному поведению backstack / навигации.

Кроме того, я не вижу, находится ли ваш адаптер внутри действия или фрагмента.[Вы можете использовать «this» внутри Acitivity и getActivity () внутри Fragment]

Наконец, я не могу понять, как вы создаете адаптер, но то, как ваш код в настоящее время организован, вам нужно передать контекст Activityв адаптер для его работы.Из фрагмента:

adapter = new MyComicAdapter(getActivity(), list);

Из упражнения:

adapter = new MyComicAdapter(this, list);

Скорее всего, это предотвратит возникшее исключение.

0 голосов
/ 23 февраля 2019

Измените ваш звонок на новый вид деятельности следующим образом,

Intent intent=new Intent(context, ChapterActivity.class);
Activity activity=(Activity) context;
activity.startActivity(intent);
0 голосов
/ 23 февраля 2019

Попробуйте следующим образом,
1. Создайте интерфейс в своем адаптере и передайте ему позицию (надеюсь, вы знаете, как создать и использовать интерфейс).
2. Реализуйте этоинтерфейс к вашему классу активности.
3. в его методе переопределения вы получите позицию списка.
4. используя эту позицию, получите необходимые данные и намерение вызова в них.
Готово.

...