Vaziyat o'zgarganda, adapter haqida xabardor bo'lish uchun nima qilish kerak?

Asosiy faoliyatimda ikkita qismim bor. Biri qo'shiqlar ro'yxati va ikkinchisi sevimli. Ushbu ikkala qismda ListView va maxsus adapter mavjud. Bir tugma mavjud bo'lgan pastki varaq mavjud. ushbu tugma bosilganda ushbu qo'shiq sevimliga qo'shiladi (ikkinchi qism). Men qo'shiqni sevimli fragmentga qo'sha olaman, lekin uni qo'shgan vaqtimizda ko'rsatilmaydi. dasturni sevimli dasturga kiritish uchun uni qayta ishga tushirishimiz kerak. Sevimlilarni qo'shish uchun tugmacha asosiy faoliyatdan foydalaniladi. Mening adapterimga ushbu holat o'zgarganligi haqida xabar beradigan biron bir usul bormi? (Qo'shiqlar sevimli ma'lumotlar bazasiga qo'shildi)

Men ochilganda fragmentni yangilashim mumkinmi?

Bu - Sevimlilar tugmasi bosilganda ma'lumotlar bazasida qo'shiq nomini qo'shadigan tugma bo'lgan asosiy faoliyat turi.

favourite.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                if(x==0) {                         
  favourite.setImageResource(R.drawable.ic_favorite);x=1;
                    boolean isinserted =   
  mydb.insertdata(collections.get(a).getsong().toString());

                    if (isinserted == true) {
                        Toast.makeText(MainActivity.this, "Added as favorite", Toast.LENGTH_LONG).show();
                        x=1;
                    }
                    else
                    {
                        Toast.makeText(MainActivity.this, "data not inserted", Toast.LENGTH_LONG).show();
                    }

                }

                else{favourite.setImageResource(R.drawable.ic_favorite_border);
                    int deletedrow = mydb.deleteData(collections.get(a).getsong());
                    if(deletedrow>0){Toast.makeText(MainActivity.this, "removed from favorite", Toast.LENGTH_LONG).show();
                        finish();
                        startActivity(getIntent());

                        x=0;
                    }
                    else {Toast.makeText(MainActivity.this, " not removed from favorite", Toast.LENGTH_LONG).show();
                    }
                }

            }
        });
1
viewpager @ Harsh Raval dan foydalanmoqdamisiz? kodingizni joylashtiring
qo'shib qo'ydi muallif Nilabja, manba
viewpager @ Harsh Raval dan foydalanmoqdamisiz? kodingizni joylashtiring
qo'shib qo'ydi muallif Nilabja, manba
faoliyatdan fragment_favourite.someMethod() ga qo'ng'iroq qiling va u erda adapter.notifyDataSetChanged ();
qo'shib qo'ydi muallif Nilabja, manba
faoliyatdan fragment_favourite.someMethod() ga qo'ng'iroq qiling va u erda adapter.notifyDataSetChanged ();
qo'shib qo'ydi muallif Nilabja, manba
Ro'yxatdagi asosiy adapter uchun notifyDataSetChanged deb chaqirasizmi?
qo'shib qo'ydi muallif Selçuk Cihan, manba
Ro'yxatdagi asosiy adapter uchun notifyDataSetChanged deb chaqirasizmi?
qo'shib qo'ydi muallif Selçuk Cihan, manba
Agar mcve kerak bo'lsa, stackoverflow.com/help/mcve
qo'shib qo'ydi muallif Selçuk Cihan, manba
ba'zi kodlarni qo'shing va hozirgacha nimani sinab ko'rdingiz?
qo'shib qo'ydi muallif Sanny, manba
ba'zi kodlarni qo'shing va hozirgacha nimani sinab ko'rdingiz?
qo'shib qo'ydi muallif Sanny, manba
ha, lekin hech narsa bo'lmaydi. chunki tugma asosiy faoliyatda
qo'shib qo'ydi muallif Harsh Raval, manba
Ha ko'rish pageridan foydalanaman.
qo'shib qo'ydi muallif Harsh Raval, manba
Ha ko'rish pageridan foydalanaman.
qo'shib qo'ydi muallif Harsh Raval, manba

11 javoblar

Ma'lumotlar bazasidan ma'lumotlar olsangiz, fragmentingizni yangilashingiz kerak, kursorni yoki ro'yxatingizni yangilashingiz kerak, buni bu usulda tekshirishingiz mumkin yoki siz qo'shilgan fav hodisasini tinglashingiz mumkin bo'lgan tinglovchini mumkin.

 @Override
    public void setUserVisibleHint(boolean isVisibleToUser) {
        super.setUserVisibleHint(isVisibleToUser);
        if (isVisibleToUser) {

        }else{
           //fragment is no longer visible
        }
    }
0
qo'shib qo'ydi

Bilamanki, ikkita qismingiz bor. Mana, quyidagi yechim:

1-qadam: Siz ikkita qismga adapteringizni yangilash uchun ikkita usulni tanlashingiz mumkin!

SongFragment:

public void updateDataList(){
    if(songAdapter != null){
        songAdapter.notifyDataSetChanged();
    }
}

FavoriteFragment:

public void updateDataList(){
    if(favoriteAdapter != null){
        favoriteAdapter.notifyDataSetChanged();
    }
}

2-qadam:     Ko'rsatishlaringizni yangilashni xohlaganingizda va MainActivity SongFragment va FavoriteFragment misolini saqlashi kerak.     MainActivity-da updateDataList usulini qidirishingiz mumkin. Masalan:

songFragment.updateDataList();
favoriteFragment.updateDataList();
0
qo'shib qo'ydi
Faqat sizning ma'lumotlaringiz ro'yxati adapteringizda o'zgartirilishi kerak bo'lsa, u ishlay oladi!
qo'shib qo'ydi muallif Ethan, manba

Bilamanki, ikkita qismingiz bor. Mana, quyidagi yechim:

1-qadam: Siz ikkita qismga adapteringizni yangilash uchun ikkita usulni tanlashingiz mumkin!

SongFragment:

public void updateDataList(){
    if(songAdapter != null){
        songAdapter.notifyDataSetChanged();
    }
}

FavoriteFragment:

public void updateDataList(){
    if(favoriteAdapter != null){
        favoriteAdapter.notifyDataSetChanged();
    }
}

2-qadam:     Ko'rsatishlaringizni yangilashni xohlaganingizda va MainActivity SongFragment va FavoriteFragment misolini saqlashi kerak.     MainActivity-da updateDataList usulini qidirishingiz mumkin. Masalan:

songFragment.updateDataList();
favoriteFragment.updateDataList();
0
qo'shib qo'ydi
Faqat sizning ma'lumotlaringiz ro'yxati adapteringizda o'zgartirilishi kerak bo'lsa, u ishlay oladi!
qo'shib qo'ydi muallif Ethan, manba

ro'yxatni yangi qo'shilgan element bilan yangilab, qo'ng'iroq qiling

adapter.notifyDataSetChanged();
0
qo'shib qo'ydi

ro'yxatni yangi qo'shilgan element bilan yangilab, qo'ng'iroq qiling

adapter.notifyDataSetChanged();
0
qo'shib qo'ydi

adapteringizdan quyidagi kodni notifyDataSetChanged() deb chaqirishingiz kerak:

yourAdapter.notifyDataSetChanged();
0
qo'shib qo'ydi

adapteringizdan quyidagi kodni notifyDataSetChanged() deb chaqirishingiz kerak:

yourAdapter.notifyDataSetChanged();
0
qo'shib qo'ydi

Ro'yxatga kiritish uchun ushbu elementni bosing:

    public Both[] boths;
public ArrayList both = new ArrayList();

onItemClick:

String itemValue = (String) listview.getItemAtPosition(i);
 if (boths == null) {
                boths = new Both[]{    \\Both is your Object Class name
                        new Both(itemValue)  
                };
            }
            both.addAll(Arrays.asList(boths));
            adapters.notifyDataSetChanged();   \\adapters is your Adapter Name 
            adapters.setAdapter(both); 
0
qo'shib qo'ydi

Ro'yxatga kiritish uchun ushbu elementni bosing:

    public Both[] boths;
public ArrayList both = new ArrayList();

onItemClick:

String itemValue = (String) listview.getItemAtPosition(i);
 if (boths == null) {
                boths = new Both[]{    \\Both is your Object Class name
                        new Both(itemValue)  
                };
            }
            both.addAll(Arrays.asList(boths));
            adapters.notifyDataSetChanged();   \\adapters is your Adapter Name 
            adapters.setAdapter(both); 
0
qo'shib qo'ydi

Agar kimdir buni istasa, uni hal qildim.

Men tugma bosilganda efirga uzatilganman. Keyinchalik, bu translyatsiya qismlarga qo'shiladi. Qabul qiluvchilar ro'yxatida men ro'yxatdan o'chirdim va yana ro'yxatni qo'shdim. Hozirgi holatda adapter o'zgaradi

0
qo'shib qo'ydi

Agar kimdir buni istasa, uni hal qildim.

Men tugma bosilganda efirga uzatilganman. Keyinchalik, bu translyatsiya qismlarga qo'shiladi. Qabul qiluvchilar ro'yxatida men ro'yxatdan o'chirdim va yana ro'yxatni qo'shdim. Hozirgi holatda adapter o'zgaradi

0
qo'shib qo'ydi