Мне нужна рекомендация или объяснение, потому что я немного потерян
Я использую навигацию снизу с 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();