رتبه موضوع:
  • 0 رای - 0 میانگین
  • 1
  • 2
  • 3
  • 4
  • 5
آپدیت یک آیتم خاص ریسایکلر ویو
#1
سلام . یک ریسایکلر ویو دارم که جیسون رو از سرور میگیره و نظرات رو نمایش میده . زیر هر یک از نظرات تکست ویو like , dislike قرار داره . وقتی کاربر روی لایک کلیک میکنه من یه مقدای رو برای سرور پست میکنم که توی دیتابیس مقدار افزایش پیدا میکنه . حالا میخوام وفتی کلیک شد و دیتا پست شد بعدش اون تکست ویو لایک هم آپدیت بشه و مقدار جدید رو بخونه . این قسمت که تکست ویو اپدیت بشه به درستی کار نمیکنه ممنون میشم راهنمایی کنید
notifyItemChanged(position,entries.get(position).getNazarid());

از این کد استفاده کردم ولی جواب نداد

public void onBindViewHolder(final ListNazaratViewholder holder, final int position) {
    holder.tdislike.setText(entries.get(position).getDislike());
    holder.tlike.setText(entries.get(position).getLike());

    holder.like.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(final View v) {
            myDB = new MyDatabaseHelper(v.getContext());
            final String tg =holder.tnazarid.getText().toString().trim();
            SQLiteDatabase db = myDB.getWritableDatabase();
            Cursor cur1 = db.rawQuery("SELECT Idcomment FROM user_comment WHERE Idcomment= '"+ entries.get(position).getNazarid() +"' ", null);
            if (cur1.getCount() == 0) {
                StringRequest stringRequest = new StringRequest(Request.Method.POST,REGISTER_URL,
                        new Response.Listener<String>() {
                            @Override
                            public void onResponse(String response) {
                                // Toast.makeText(ErsalNazar.this,"نظر شما ارسال شد و پس از تایید نمایش داده خواهد شد",Toast.LENGTH_LONG).show();
                                Toast.makeText(v.getContext(),tg + "ثبت شد", Toast.LENGTH_SHORT).show();
                                notifyItemChanged(position,entries.get(position).getNazarid());
                            }
                        },
                        new Response.ErrorListener() {
                            @Override
                            public void onErrorResponse(VolleyError error) {
                         
                            }
                        }){
                    @Override
                    protected Map<String,String> getParams(){
                        Map<String,String> params = new HashMap<String, String>();
                        params.put(KEY_idcomm, tg );
                        params.put(KEY_liketype,"like");
                        return params;
                    }};

                RequestQueue requestQueue = Volley.newRequestQueue(v.getContext());
                requestQueue.add(stringRequest);

            }
            else if ((cur1.getCount()!=0)){
                Toast.makeText(v.getContext(),"قبلا ثبت شده است", Toast.LENGTH_SHORT).show();

            }
            cur1.close();
            db.close();
        }
    });
}
پاسخ
تشکر شده توسط:
#2
بعد از اینکه تغییرات رو انجام دادین، روی آداپترتون متد notifyDataSetChanged رو فراخوانی کنید. ضمناً باید آیتم موردنظر رو از آرایه‌ای که آداپتر از روی اون ایجاد شده اعمال کنید نه اینکه مستقیماً عناصر ریسایکلرویو رو تغییر بدین. بعد از صدازدن notifyDataSetChanged، خود ریسایکلرویو براساس تغییرات آرایه، بروزرسانی میشه.
پاسخ
تشکر شده توسط:




کاربران در حال بازدید این موضوع: 2 مهمان