Запуск пользовательской вкладки Chrome из адаптера RecyclerView

Я намерен запустить вкладку Chrome Custom из RecyclerView следующим образом:

public CustomAdapter(Context context, List<Artifact> ListOfArtifacts) {
    this.context = context;
    this.ListOfArtifacts = ListOfArtifacts;
}

@Override
public void onBindViewHolder(ViewHolder holder, final int position) {
    holder.artifactAuthor.setText(ListOfArtifacts.get(position).getAuthor());
    holder.artifactTitle.setText(ListOfArtifacts.get(position).getTitle());
    holder.seeders.setText(String.valueOf(ListOfArtifacts.get(position).getSeeders()));
    holder.leechers.setText(String.valueOf(ListOfArtifacts.get(position).getLeechers()));
    holder.addedOn.setText(df.format(ListOfArtifacts.get(position).getAdded_on()));
    holder.artifactTitle.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            try {
                /*Intent launchArtifactAuthor = new Intent(Intent.parseUri(ListOfArtifacts.get(position).getURL(), Intent.URI_INTENT_SCHEME));
                context.startActivity(launchArtifactAuthor);*/
                CustomTabsIntent.Builder intentBuilder = new CustomTabsIntent.Builder();

                // Begin customizing
                // set toolbar colors
                intentBuilder.setToolbarColor(ContextCompat.getColor(context, R.color.colorPrimary));
                intentBuilder.setSecondaryToolbarColor(ContextCompat.getColor(context, R.color.colorPrimaryDark));

                // set start and exit animations
                intentBuilder.setStartAnimations(context, android.R.anim.slide_out_right, android.R.anim.fade_in);
                intentBuilder.setExitAnimations(context, android.R.anim.slide_in_left,
                        android.R.anim.slide_out_right);

                // build custom tabs intent
                CustomTabsIntent customTabsIntent = intentBuilder.build();
                customTabsIntent.launchUrl((Activity) context, Uri.parse(ListOfArtifacts.get(position).getURL()));


            }catch (Exception e) {
                e.printStackTrace();
            }
        }
    });
}

Поскольку сигнатура метода customTabsIntent.launchUrl требует, чтобы первым параметром был Activity, я привожу контекст в действие, поэтому

java.lang.ClassCastException: android.app.Application не может быть преобразован в android.app.Activity

на линии customTabsIntent.launchUrl((Activity) context, Uri.parse(ListOfArtifacts.get(position).getURL()));

Как это исправить ?


person CodeWalker    schedule 25.08.2017    source источник
comment
непонятно, откуда вы берете контекст. пожалуйста, добавьте конструктор, если вы получаете от него контекст.   -  person humazed    schedule 25.08.2017
comment
@humazed — добавлен конструктор   -  person CodeWalker    schedule 25.08.2017
comment
Вы также можете добавить, где вы настраиваете свой адаптер.   -  person humazed    schedule 25.08.2017


Ответы (1)


Если вам всегда будет нужна активность внутри вашего представления корзины, я думаю, что нет смысла получать Context и анализировать его в Activity; вместо этого просто получите Activity из конструктора.

поэтому я предлагаю изменить ваш конструктор на

public CustomAdapter(Activity activity, List<Artifact> ListOfArtifacts) {
    this.activity= activity;
    this.ListOfArtifacts = ListOfArtifacts;
}

и просто используйте активность для запуска Chrome custom tabs.

customTabsIntent.launchUrl(activity, Uri.parse(ListOfArtifacts.get(position).getURL()));

если вам интересно, что не так с вашим кодом, я думаю, вы передаете контекст приложения, а не контекст действия.

person humazed    schedule 25.08.2017