2017-08-25 95 views
0

我打算从RecyclerView这样发动Chrome Custom标签 -从RecyclerView适配器启动Chrome的自定义标签

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()));

我该如何解决这个问题?

+0

目前尚不清楚你从哪里获得上下文。如果您从中获得上下文,请添加构造函数。 – humazed

+0

@humazed - 添加了构造函数 – CodeWalker

+0

您还可以添加设置适配器的位置。 – humazed

回答

1

如果您在回收视图中始终需要活动,我认为获取上下文并将其解析为活动没有意义;而只需从构造函数中获取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())); 

的情况下,你想知道什么是你的代码错误,我想你是通过应用程序上下文,不活动上下文。

+0

工作正常!干杯。 – CodeWalker