0

RecyclerViewでカードをクリックすると、カスタムクロムタブを使用してURLを開こうとしています。しかし、customTabsIntent.launchUrl()は最初の引数がアクティビティであることを望んでいます。カスタムChromeタブでリサイクルビュー

どうすれば実装できますか?ここで

が私のコードです:

マイArticleViewAdapter.java

public class ArticleViewAdapter extends RecyclerView.Adapter<ArticleViewAdapter.ViewHolder> { 

     private ImageLoader imageLoader; 
     private Context context; 
     Intent intent; 

     List<Article> articleFeed; 

     public ArticleViewAdapter(List<Article> articleFeed, Context context){ 
      super(); 
      //Getting all the articles 
      this.articleFeed = articleFeed; 
      this.context = context; 
     } 





     @Override 
     public ArticleViewAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
      View v = LayoutInflater.from(parent.getContext()) 
        .inflate(R.layout.article_view, parent, false); 
     Log.i("Errore","in viewholder"); 
      ViewHolder holder=new ViewHolder(v); 
      return holder; 
     } 

     @Override 
     public void onBindViewHolder(ArticleViewAdapter.ViewHolder holder, int position) { 

      final Article currentArticle=articleFeed.get(position); 
      imageLoader = MySingleton.getInstance(context).getImageLoader(); 
      imageLoader.get(currentArticle.getImageUrl(), ImageLoader.getImageListener(holder.image, R.mipmap.ic_launcher, android.R.drawable.ic_dialog_alert)); 

      holder.image.setImageUrl(currentArticle.getImageUrl(), imageLoader); 
      holder.title.setText(currentArticle.getTitle()); 
      holder.itemView.setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View view) { 
        CustomTabsIntent.Builder builder = new CustomTabsIntent.Builder(); 
    // set toolbar color and/or setting custom actions before invoking build() 
        CustomTabsIntent customTabsIntent = builder.build(); 

//THE ERROR OCCURES HERE 
        customTabsIntent.launchUrl(context,Uri.parse(currentArticle.getURL())); 
        Log.i("Errore",currentArticle.getURL()); 
       } 
      }); 

     } 

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

     class ViewHolder extends RecyclerView.ViewHolder{ 

      TextView title; 
      NetworkImageView image; 
      public ViewHolder(View itemView) { 
       super(itemView); 
       title=(TextView)itemView.findViewById(R.id.heading); 
       image=(NetworkImageView)itemView.findViewById(R.id.image); 
      } 

     } 
    } 

マイNewsActivity.java

public class NewsActivity extends AppCompatActivity { 

    private static String API_KEY="xxxxxxxxxxx"; 
    private List<Article> listOfArticles; 
    static Article curArticle ; 

    //Creating Views 
    private RecyclerView recyclerView; 
    private RecyclerView.LayoutManager layoutManager; 
    private RecyclerView.Adapter adapter; 
    private JSONArray jsonArticles; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_news); 
     Intent intent=getIntent(); 
     String id=intent.getStringExtra("id"); 
     String sortBy=intent.getStringExtra("sortBy"); 
     Toast.makeText(NewsActivity.this, id, Toast.LENGTH_SHORT).show(); 

     recyclerView = (RecyclerView) findViewById(R.id.recycview); 
     recyclerView.setHasFixedSize(true); 


     layoutManager = new LinearLayoutManager(this); 
     recyclerView.setLayoutManager(layoutManager); 

     //Initializing our article list 
     listOfArticles = new ArrayList<>(); 
     final ProgressDialog loading = ProgressDialog.show(this,"Loading Data", "Please wait...",false,false); 

     //Creating a newe json object request 
     Log.i("Errore","https://newsapi.org/v1/articles?source=" + id + "&sortBy="+sortBy+"&apiKey=" + API_KEY); 
     JsonObjectRequest jsonObjectRequest=new JsonObjectRequest(Request.Method.GET, "https://newsapi.org/v1/articles?source=" + id + "&sortBy="+sortBy+"&apiKey=" + API_KEY, null, new Response.Listener<JSONObject>() { 
      @Override 
      public void onResponse(JSONObject response) { 

       Log.i("Errore","getting json"); 
       loading.dismiss(); 
       try { 
        jsonArticles=response.getJSONArray("articles"); 

        for(int i=0;i<jsonArticles.length();i++){ 

         Article article=new Article(); 
         JSONObject jsonObject=jsonArticles.getJSONObject(i); 
         article.setTitle(jsonObject.getString("title")); 
        // Log.i("Errore",jsonObject.toString()); 
         article.setImageUrl(jsonObject.getString("urlToImage")); 
         article.setURL(jsonObject.getString("url")); 
         listOfArticles.add(article); 

        } 

        //Finally initializing our adapter 
        adapter = new ArticleViewAdapter(listOfArticles,NewsActivity.this); 

        //Adding adapter to recyclerview 
        recyclerView.setAdapter(adapter); 

       } catch (JSONException e) { 
        e.printStackTrace(); 
        Log.i("Errore","failed getting json"); 
       } 


      } 
     }, new Response.ErrorListener() { 
      @Override 
      public void onErrorResponse(VolleyError error) { 

      } 
     }); 

     //Adding request to the queue 
     MySingleton.getInstance(this).addToRequestQueue(jsonObjectRequest); 
    } 



} 

私はエラーを取得しておいてください。

Wrong 1st argument type.Found:android.content.Context, required: android.app.Activity 

どうすべき私はoそれを修正するには? カスタムクロムタブを使用できるOnClickを使用するより良い方法はありますか?あなたの主な活動で

+1

を行う私はあなたが 'Context'からActivity''へあなたの 'Adapter'のフィールドを変更し、必要なときにそれをキャストすることができると思います。 –

+0

キャストする方法の例を教えてください。 –

+1

java: '(Context)activityVaribaleName;で他のすべてをキャストしているように。 –

答えて

0
customTabsIntent.launchUrl(MainActivity.activity,Uri.parse(currentArticle.getURL())); 
        Log.i("Errore",currentArticle.getURL()); 

この

@Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
    activity=this; 



} 
関連する問題