Основной вид деятельности переработчика — Переключение фрагментов

#java #android #android-recyclerview #fragment #android-bottomnav

Вопрос:

Извиняюсь, я новичок и учусь каждый день. *Отредактировано для ответа на вопросы.

  • Мой RecyclerView помещается в файл макета MainActivity и запускается при запуске приложения
  • Когда я пытаюсь переключить фрагменты, recyclerview по — прежнему отображается при изменении фрагмента. -Фрагменты, безусловно, меняются в соответствии с контроллером navhost, но RecyclerView продолжает отображаться.
  • Я хочу, чтобы RecyclerView отображался только в одном фрагменте, но каждый раз, когда я переключаю код на ui.home.Домашняя страница или пользовательский интерфейс.HomeViewModel приложение не запустится.

Чего я пытаюсь достичь;

  1. 5 фрагмент приложения с нижними вкладками навигации с использованием настроек Android Studio по умолчанию.
  2. один из фрагментов, содержащих RecyclerView
  3. Фрагменты настраиваются в формате ie. ui.home.Домашняя страница и пользовательский интерфейс.главная страница.Модель домашнего просмотра.

Кто-нибудь мог бы посоветовать, почему при переключении фрагментов он продолжает показывать RecyclerView из MainActivity? В любое время, когда я перемещаю этот просмотр вторсырья в другой fragment.xml и выньте его из MainActivity.xml файл выходит из строя.

activity_main.xml

 lt;?xml version="1.0" encoding="utf-8"?gt; lt;androidx.constraintlayout.widget.ConstraintLayout  xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:id="@ id/container" android:layout_width="match_parent" android:background="#DCDCDC" android:layout_height="match_parent" android:paddingTop="0dp"gt;   lt;fragment  android:id="@ id/nav_host_fragment_activity_main"  android:name="androidx.navigation.fragment.NavHostFragment"  android:layout_width="match_parent"  android:layout_height="match_parent"  app:defaultNavHost="true"  app:layout_constraintLeft_toLeftOf="parent"  app:layout_constraintRight_toRightOf="parent"  app:layout_constraintTop_toTopOf="parent"  app:layout_constraintVertical_bias="0"  app:navGraph="@navigation/mobile_navigation" gt;  lt;/fragmentgt;   lt;com.google.android.material.bottomnavigation.BottomNavigationView  android:id="@ id/nav_view"  android:layout_width="0dp"  android:layout_height="wrap_content"  android:layout_marginStart="0dp"  android:layout_marginEnd="0dp"  android:background="#282D58"  app:itemIconTint="@color/white"  app:itemTextColor="@color/white"  app:labelVisibilityMode="labeled"  app:layout_constraintBottom_toBottomOf="parent"  app:layout_constraintLeft_toLeftOf="parent"  app:layout_constraintRight_toRightOf="parent"  app:menu="@menu/bottom_nav_menu" /gt;  lt;androidx.recyclerview.widget.RecyclerView  android:id="@ id/recyclerView"  android:layout_width="match_parent"  android:layout_height="match_parent"  android:layout_marginBottom="60dp"  android:layout_marginTop="60dp"  tools:layout_editor_absoluteX="0dp"  tools:listitem="@layout/note_item" /gt; lt;/androidx.constraintlayout.widget.ConstraintLayoutgt;  

Основная деятельность

 public class MainActivity extends AppCompatActivity {  private NoteViewModel noteViewModel; private RecyclerView RecyclerView; private RecyclerView.Adapter Adapter; private RecyclerView.LayoutManager LayoutManager; private ActivityMainBinding binding;  ImageView imageView1;  @Override protected void onCreate(Bundle savedInstanceState) {  super.onCreate(savedInstanceState);  binding = ActivityMainBinding.inflate(getLayoutInflater());  setContentView(binding.getRoot());   BottomNavigationView navView = findViewById(R.id.nav_view);  AppBarConfiguration appBarConfiguration = new  AppBarConfiguration.Builder(  R.id.navigation_logbook, R.id.navigation_settings,  R.id.navigation_aircraft, R.id.navigation_pilots,  R.id.navigation_totals)  .build();  NavController navController = Navigation.findNavController(this,  R.id.nav_host_fragment_activity_main);  NavigationUI.setupWithNavController(binding.navView, navController);    RecyclerView recyclerView = findViewById(R.id.recyclerView);  recyclerView.setLayoutManager(new LinearLayoutManager(this));  recyclerView.setHasFixedSize(true);  NoteAdapter adapter = new NoteAdapter();  recyclerView.setAdapter(adapter);    noteViewModel = new   ViewModelProvider.AndroidViewModelFactory(getApplication())  .create(NoteViewModel.class);  noteViewModel.getAllNotes().observe(this, new Observerlt;Listlt;Notegt;gt;()   {  @Override  public void onChanged(Listlt;Notegt; notes) {    //update RecyclerView  adapter.setNotes(notes);  }  });   imageView1 = findViewById(R.id.flightadd);  imageView1.setOnClickListener(new View.OnClickListener() {  @Override  public void onClick(View v) {  Intent intent = new Intent(MainActivity.this,   AddNoteActivity.class);  startActivityForResult(intent, 1);  }     });  new ItemTouchHelper(new   ItemTouchHelper.SimpleCallback(0,ItemTouchHelper.LEFT) {  @Override  public boolean onMove(@NonNull RecyclerView recyclerView,   @NonNull RecyclerView.ViewHolder viewHolder, @NonNull   RecyclerView.ViewHolder target) {  return false;  }   @Override  public void onSwiped(@NonNull RecyclerView.ViewHolder   viewHolder, int direction) {       noteViewModel.delete(adapter.getNotes(viewHolder.getAdapterPosition()));   }  }).attachToRecyclerView(recyclerView);     adapter.setOnItemClickListener(new   NoteAdapter.OnItemClickListener() {  @Override  public void onItemClick(Note note) {  Intent intent = new Intent(MainActivity.this,   UpdateActivity.class);  intent.putExtra("id", note.getId());  intent.putExtra("title", note.getTitle());  intent.putExtra("description", note.getDescription());  intent.putExtra("year", note.getYear());  intent.putExtra("flightnumber", note.getFlightnumber());  intent.putExtra("reg", note.getReg());  intent.putExtra("month", note.getMonth());  intent.putExtra("date", note.getDate());  intent.putExtra("dep", note.getDep());  intent.putExtra("arr", note.getArr());  intent.putExtra("total", note.getTotal());  intent.putExtra("offb", note.getOffb());  intent.putExtra("onb", note.getOnb());  startActivityForResult(intent, 2);   }  });  }     @Override protected void onActivityResult(int requestCode, int resultCode,   @Nullable Intent data){  super.onActivityResult(requestCode, resultCode, data);   if (requestCode == 1 amp;amp; resultCode == RESULT_OK)  {  String title = data.getStringExtra("noteTitle");  String description = data.getStringExtra("noteDescription");  String year = data.getStringExtra("noteYear");  String reg = data.getStringExtra("noteReg");  String month = data.getStringExtra("noteMonth");  String date = data.getStringExtra("noteDate");  String flightnumber = data.getStringExtra("noteFlightnumber");  String dep = data.getStringExtra("noteDep");  String arr = data.getStringExtra("noteArr");  String offb = data.getStringExtra("noteOffb");  String onb = data.getStringExtra("noteOnb");  String total = data.getStringExtra("noteTotal");   Note note = new Note(title, description, year, reg, month,   flightnumber, date, dep, arr, offb, onb, total);  noteViewModel.insert(note);   }   else if (requestCode == 2 amp;amp; resultCode == RESULT_OK)  {  String title = data.getStringExtra("titleLast");  String description = data.getStringExtra("descriptionLast");  String year = data.getStringExtra("yearLast");  String flightnumber = data.getStringExtra("flightnumberLast");  String reg = data.getStringExtra("titleReg");  String month = data.getStringExtra("titleMonth");  String date = data.getStringExtra("titleDate");  String dep = data.getStringExtra("titleDep");  String arr = data.getStringExtra("titleArr");  String offb = data.getStringExtra("titleOffb");  String onb = data.getStringExtra("titleOnb");  String total = data.getStringExtra("titleTotal");   int id = data.getIntExtra("noteId", -1);   Note note = new Note(title, description, year, month, reg,   flightnumber, date, dep, arr, offb, onb, total);  note.setId(id);  noteViewModel.update(note);  }    }  

Комментарии:

1. Переместите свой RecyclerView во фрагмент, если ваше приложение выходит из строя после трассировки стека, чтобы получить помощь. Если вы разместите recyclerView activity , это всегда будет видно.

2. чего вы пытаетесь достичь здесь с точки зрения пользовательского интерфейса? способ создания действия с нижней навигацией, содержащей 5 вкладок «фрагменты», находится в вашем XML, но вы добавили бесполезный вид для повторного использования и макет таблицы в микс

3. у вас должны быть только lt;фрагментgt; и lt;фрагментgt;lt;bottomnavigationviewgt; в вашем activity_main, а затем внутри файла макета для каждого фрагмента вы должны указать конкретный дизайн для этой страницы

4. Спасибо вам за ответы. Я попытался обновить вопрос выше, чтобы лучше объяснить. Все 5 фрагментов содержатся в ui.name.NameFragment и ui.name.NameViewModel.

Ответ №1:

Нашел решение. Пришлось удалить навигационный контроллер и добавить следующее. Добавление повторных копий в каждый класс деятельности. RecyclerView запускается в режиме основной активности на вкладке «Главная панель» и закрывается при выборе новых действий с помощью панели «Главная панель».

MainActivity.java

 BottomNavigationView bottomNavigationView =   findViewById(R.id.nav_view);     bottomNavigationView.  setOnNavigationItemSelectedListener((   item) -gt; {  switch (item.getItemId()) {  case R.id.navigation_logbook:   break;   case R.id.navigation_pilots:  Intent intent2 = new   Intent(MainActivity.this, Pilots.class);  startActivity(intent2);  break;   case R.id.navigation_settings:  Intent intent3 = new   Intent(MainActivity.this, Settings.class);  startActivity(intent3);  break;   case R.id.navigation_aircraft:  Intent intent4 = new   Intent(MainActivity.this, Aircraft.class);  startActivity(intent4);  break;   case R.id.navigation_totals:  Intent intent5 = new   Intent(MainActivity.this, Totals.class);  startActivity(intent5);  break;   }  return false;  });