رفتن به مطلب
  • 0

لود اطلاعات بیشتر با اسکرول کردن در ریسایکار ویو


mohammad_pyn

سوال

سلام دوستان

من یه سری اطلاعات رو بصورت json از سرور دریافت مینکنم و از طریق کتابخانه volley اونها رو دریافت و در یک ریسایکلر ویو نمایش میدم.

الان میخوام در ریسایکلرویو کل اطلاعات همزمان لود نشده و با اسکرول کردن ده تا ده تا اطلاعات رو از سرور بخونه و هرچی پایین تر میاییک ده تای بعدی لود بشه

چطور میتونم این کار رو بکنم

 

 

این کد دریافت اطلاعات و فراخونی ریسایکلر ویو:

 private void makeJsonArrayRequest_News() {
        showpDialog();



        JsonArrayRequest req = new JsonArrayRequest(urlJsonArray,
                new Response.Listener<JSONArray>() {
                    @Override
                    public void onResponse(JSONArray response) {
                        Log.d(TAG, response.toString());

                        try {
                            // Parsing json array response
                            // loop through each json object


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

                                News news = new News();


                                JSONObject person = (JSONObject) response.get(i);
                                String id = person.getString("id");
                                String title = person.getString("title");
                                String shortcontent = person.getString("shortcontent");
                                String longcontent = person.getString("longcontent");
                                String publicationdate = person.getString("publicationdate");
                                String pic = person.getString("pic");
                                String diffdate=person.getString("diffdate");
                                String src=person.getString("src");
                                String link=person.getString("link");



                                news.setId(id);
                                news.setTitle(title);
                                news.setShortContent(shortcontent);
                                news.setLongContent(longcontent);
                                news.setPublicationDate(publicationdate);
                                news.setPic(pic);
                                news.setDiffDate(diffdate);
                                news.setSrc(src);
                                news.setLongContent(link);
                                mNews.add(news);

                            }
                            RecyclerView recyclerViewlist=(RecyclerView) findViewById(R.id.newsList);
                            //tarif class adapter recyclview
                            RVAdapterNews ad=new RVAdapterNews(NewsActivity.this,mNews);
                            recyclerViewlist.setAdapter(ad);
                            //tarif layout maneger baraye tarif noe nemayesh
                            recyclerViewlist.setLayoutManager(new LinearLayoutManager(NewsActivity.this));



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

                            Toast.makeText(getApplicationContext(),
                                    "ارتباط با سرور برقرار نشد،آخرین اطلاعات دریافتی نمایش داده می شود",
                                    Toast.LENGTH_LONG).show();

                        }
                        hidepDialog();

                    }
                }, new Response.ErrorListener() {
            @Override
            public void onErrorResponse(VolleyError error) {
                VolleyLog.d(TAG, "Error: " + error.getMessage());
                //Toast.makeText(getApplicationContext(),
                //        error.getMessage(), Toast.LENGTH_SHORT).show();
                Toast.makeText(getApplicationContext(),
                        "ارتباط با سرور برقرار نشد،آخرین اطلاعات دریافتی نمایش داده می شود",
                        Toast.LENGTH_LONG).show();
                hidepDialog();
            }
        });

        // Adding request to request queue
        AppController.getInstance().addToRequestQueue(req);


    }

اینم کد آداپتر ریسایکلر ویو

.
.
.
public class RVAdapterNews extends RecyclerView.Adapter<RVAdapterNews.MyViewHolder> {
    //consteraktor ra misazim
    private Context context;
    private LayoutInflater inflater;
    private List<News> mNews = new ArrayList<>();



    public RVAdapterNews(NewsActivity context, List<News> mNews){
        this.context=context;
        this.inflater=LayoutInflater.from(context);
        this.mNews=mNews;


    }
    @Override
    public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        //bayad aval yek layout besazim - recycler_layout
        //layout ro moarefi mikonim

        View v=inflater.inflate(R.layout.rvnews_layout,parent,false);
        MyViewHolder vh=new MyViewHolder(v);
        return vh;
    }
    @Override
    public void onBindViewHolder(final MyViewHolder holder, final int position) {
        //itemhaei ke bayad neshan dadeh shavad bayad inja vared shavad
        final News news=mNews.get(position);

        holder.newsTitle.setText(news.getTitle());
        //----------------------
        long seconds=Long.parseLong(news.getDiffDate());
        //int day = (int) TimeUnit.SECONDS.toDays(seconds);
        //long hours = TimeUnit.SECONDS.toHours(seconds) - (day *24);
        //long minute = TimeUnit.SECONDS.toMinutes(seconds) - (TimeUnit.SECONDS.toHours(seconds)* 60);
        //long second = TimeUnit.SECONDS.toSeconds(seconds) - (TimeUnit.SECONDS.toMinutes(seconds) *60);
        long minute = seconds/60;
        long hours =minute/60;
        int day = (int)hours/24;
        int week =day/7;
        int month =day/30;
        int year =day/365;


        if (seconds<60)
            holder.newsDatePublication.setText(seconds+" ثانیه قبل");
        else if (seconds>=60 && seconds<3600)
            holder.newsDatePublication.setText(minute+" دقیقه قبل");
        else if (seconds>=3600 && seconds<86400)
            holder.newsDatePublication.setText(hours+" ساعت قبل");
        else if (seconds>=86400 && seconds<604800)
            holder.newsDatePublication.setText(day+" روز قبل");
        else if (seconds>=604800 && seconds<2629743)
            holder.newsDatePublication.setText(week+" هفته قبل");
        else if (seconds>=2629743 && seconds<31556926)
            holder.newsDatePublication.setText(month+" ماه قبل");
        else
            holder.newsDatePublication.setText(year+" سال قبل");



        //----------------------
        //holder.newsDatePublication.setText(newsPublicationDateItems.get(position));
        Uri uri =Uri.parse(news.getPic());
        Picasso.with(context).load(uri).resize(200, 200).centerCrop().into(holder.newsPic, new com.squareup.picasso.Callback() {
            @Override
            public void onSuccess() {

            }

            @Override
            public void onError() {
                holder.newsPic.setImageResource(R.mipmap.ic_default_list);
            }
        });
        holder.cvNews.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(context, NewsViewActivity.class);
                intent.putExtra("id", news.getId());
                intent.putExtra("title", news.getTitle());
                intent.putExtra("shortContent", news.getShortContent());
                intent.putExtra("longContent", news.getLongContent());
                intent.putExtra("datePublication", news.getPublicationDate());
                intent.putExtra("pic", news.getPic());
                intent.putExtra("src", news.getSrc());
                intent.putExtra("link", news.getLink());


                context.startActivity(intent);
            }
        });



    }

    @Override
    public int getItemCount() {
        //tedad itemhara baraye nemayesh midahim
        return mNews.size();
    }

    class MyViewHolder extends RecyclerView.ViewHolder {
        //bayad ajzaye layout ro tarif konim
        ImageView newsPic;
        TextView newsTitle;
        TextView newsShortContent;
        TextView newsLongContent;
        TextView newsDatePublication;
        CardView cvNews;

        public MyViewHolder(View itemView) {
            super(itemView);
            newsPic=(ImageView) itemView.findViewById(R.id.ivNewsPic);
            newsTitle= (TextView) itemView.findViewById(R.id.txtNewsTitle);
            newsDatePublication = (TextView) itemView.findViewById(R.id.txtNewsDatePublication);
            cvNews = (CardView) itemView.findViewById(R.id.CVNews);


        }
    }
}

لینک ارسال
به اشتراک گذاری در سایت های دیگر

0 پاسخ به این سوال تاکنون داده شده است

ارسال‌های توصیه شده

هنوز برای این سوال پاسخی ارسال نشده است

بایگانی شده

این موضوع بایگانی و قفل شده و دیگر امکان ارسال پاسخ نیست.

  • کاربران آنلاین در این صفحه   0 کاربر

    • هیچ کاربر عضوی،در حال مشاهده این صفحه نیست.
×
×
  • اضافه کردن...