Переработанный вид с настраиваемой вкладкой Chrome

Я пытаюсь открыть URL-адрес с помощью пользовательских вкладок Chrome, когда я нажимаю на карту в RecyclerView. Но customTabsIntent.launchUrl() хочет, чтобы первым аргументом было действие.

Как мне это реализовать?

Вот мой код:

Моя статьяViewAdapter.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);
            }

        }
    }

Мои новостиActivity.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

Что мне делать, чтобы это исправить? Есть ли лучший способ использовать OnClick, который позволяет использовать пользовательские вкладки Chrome?


person Kevin Bobby    schedule 13.08.2016    source источник
comment
Я думаю, вы можете изменить поле в своем Adapter с Context на Activity и использовать его при необходимости.   -  person Masked Man    schedule 13.08.2016
comment
Не могли бы вы привести пример того, как его бросить?   -  person Kevin Bobby    schedule 14.08.2016
comment
Как и все остальное в java: (Context) activityVaribaleName;.   -  person Masked Man    schedule 14.08.2016
comment
Спасибо, это решило мою проблему. Я только что сделал (Activity) context, и это сработало!   -  person Kevin Bobby    schedule 14.08.2016
comment
Рад, что это помогло. Удачного кодирования :)   -  person Masked Man    schedule 14.08.2016


Ответы (1)


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

в вашей основной деятельности сделайте это

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



}
person Hamza    schedule 16.08.2016