Передача данных между фрагментами при использовании нижней навигации - PullRequest
0 голосов
/ 25 сентября 2019

Мне нужна рекомендация или объяснение, потому что я немного потерян

Я использую навигацию снизу с 3 фрагментами

Первый называется RestaurantFragment, который содержит itemsList ресторанов, которыея получаю с сервера и загружаю эти данные в recycler view

, а второй - FavorisFragment, который содержит subList кулака itemList, и у меня есть subList вitemAdapter class

Итак, я искал, как можно передать данные между моими двумя фрагментами (или между recyclerView и фрагментом), но я нашел только один, который отправляет данные из фрагмента в другой, используя Bundle

проблема в том, что изменение фрагмента происходит в MainActivity

У меня есть решение, которое работает довольно хорошо, но я думаю, что оно потребляет память

это мой MainActivity:

import android.os.Bundle;
import android.view.MenuItem;

import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import androidx.fragment.app.Fragment;

import com.google.android.material.bottomnavigation.BottomNavigationView;

public class MainActivity extends AppCompatActivity {


    BottomNavigationView bottomNavigationView ;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container,
                new RestaurantFragment()).commit();
        bottomNavigationView = findViewById(R.id.navigation);
        bottomNavigationView.setOnNavigationItemSelectedListener(navigationItemSelectedListener);

    }

    private BottomNavigationView.OnNavigationItemSelectedListener navigationItemSelectedListener =
            new BottomNavigationView.OnNavigationItemSelectedListener() {
                @Override
                public boolean onNavigationItemSelected(@NonNull MenuItem menuItem) {
                    Fragment selectedFragment ;

                    switch (menuItem.getItemId()){
                        case R.id.nav_restaurant :

                            selectedFragment=new RestaurantFragment() ;
                            break;
                        case R.id.nav_favoris :
                            selectedFragment=new FavorisFragment() ;
                            break;
                        case R.id.nav_client :
                            selectedFragment=new ClientFragment() ;
                            break;
                        default:
                            selectedFragment=new RestaurantFragment() ;
                    }

                    getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container,selectedFragment).commit();
                    Fragment currentFragment = getSupportFragmentManager().findFragmentById(R.id.fragment_container);
                    return true ;


                }
            };


}


, и я использую MyApplication для хранения двух списков, одного из которых я получаю с сервера, и подсписка, который клиент выбирает в качестве избранного

Вот MyApplication

import android.app.Application;

import java.util.ArrayList;

public class MyApplication extends Application {
    @Override
    public void onCreate() {
        super.onCreate();
        mInstance = this;
    }
    private static MyApplication mInstance;

    public static synchronized MyApplication getInstance() {
        return mInstance;
    }
    private ArrayList<RecyclerItem> itemList;
    private ArrayList<RecyclerItem> recyclerData;

    public ArrayList<RecyclerItem> getRecyclerData(){
        return recyclerData;
    }

    public void setRecyclerData(ArrayList<RecyclerItem> recyclerData){
        this.recyclerData=recyclerData;
    }

    public ArrayList<RecyclerItem> getItemList(){
        return itemList;
    }

    public void setItemList(ArrayList<RecyclerItem> itemList){
        this.itemList=itemList;
    }

    public void deletAll(){
        this.itemList.clear();
    }
}

в itemAdapter Я использую это для отправки данных:

 MyApplication.getInstance().setItemList(itemListFavoris);

и в FavorisFragment Я использую это для получения данных:

        itemList = MyApplication.getInstance().getItemList();

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...