onCreateView и onViewCreated фрагмента вызываются два раза
При открытии приложения фрагмент вызывается два раза, даже если во ViewPager количество фрагментов равно 1, из-за чего база данных заполняется дважды одними и теми же данными. Не могу понять, в чем ошибка. Вот код фрагмента
public class ListVerbsFragment extends Fragment {
public static final String args_name = "ARGS_INT";
private RecyclerView recyclerView;
private List<Verbs> arrayList = new ArrayList<>();
private LiveData<List<Verbs>> verbsFromDataBase;
private LiveData<List<FavouriteVerbs>> favouriteVerbsList;
private MainViewModel mainViewModel;
private View view;
private int position;
private VerbsAdapter verbsAdapter;
private Toolbar toolbar;
@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
setHasOptionsMenu(true);
}
@Override
public void onCreateOptionsMenu(@NonNull Menu menu, @NonNull MenuInflater inflater) {
if (position == 1) {
super.onCreateOptionsMenu(menu, inflater);
menu.clear();
inflater.inflate(R.menu.menu, menu);
MenuItem searchItem = menu.findItem(R.id.app_bar_search);
SearchView searchView = (SearchView) searchItem.getActionView();
searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
@Override
public boolean onQueryTextSubmit(String query) {
return false;
}
@Override
public boolean onQueryTextChange(String newText) {
verbsAdapter.getFilter().filter(newText);
return true;
}
});
}
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
view = inflater.inflate(R.layout.fragment_list_verbs, container, false);
verbsAdapter = new VerbsAdapter(arrayList);
recyclerView = view.findViewById(R.id.recycleview);
recyclerView.setLayoutManager(new LinearLayoutManager(getContext()));
recyclerView.setAdapter(verbsAdapter);
return view;
}
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
position = 1;
if (getArguments() != null) {
position = getArguments().getInt(args_name);
}
mainViewModel = new ViewModelProvider(requireActivity()).get(MainViewModel.class);
}
@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
if (position == 1) {
verbsFromDataBase = mainViewModel.getVerbsList();
verbsFromDataBase.observe(getViewLifecycleOwner(), new Observer<List<Verbs>>() {
@Override
public void onChanged(List<Verbs> verbs) {
if (verbs.size() > 0) {
Log.i("MyResult", Integer.toString(verbs.size()));
verbsAdapter.setVerbsArrayList(verbs);
} else {
Log.i("MyResult", "Getting");
arrayList = JSONUtil.getData(requireActivity(), getContext());
mainViewModel.insertVerbs(arrayList);
}
}
});
} else if (position == 2) {
Log.i("MyResult", "2");
favouriteVerbsList = mainViewModel.getFavouriteVerbs();
favouriteVerbsList.observe(getViewLifecycleOwner(), new Observer<List<FavouriteVerbs>>() {
@Override
public void onChanged(List<FavouriteVerbs> verbs) {
if (verbs != null) {
List<Verbs> verbsList = new ArrayList<>();
verbsList.addAll(verbs);
verbsAdapter.setVerbsArrayList(verbsList);
Log.i("MyResult", "Done");
}
}
});
}
}
public static ListVerbsFragment newInstance(int position) {
Bundle args = new Bundle();
args.putInt(args_name, position);
ListVerbsFragment fragment = new ListVerbsFragment();
fragment.setArguments(args);
return fragment;
}
}
Код MainActivity
public class MainActivity extends AppCompatActivity{
private RecyclerView recyclerView;
private ViewPager viewPager;
private Toolbar toolbar;
private TabLayout tabLayout;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
toolbar = findViewById(R.id.toolbar);
tabLayout = findViewById(R.id.tab);
viewPager = findViewById(R.id.viewpager);
if (savedInstanceState == null){
ViewPagerVerbsAdapter adapter = new ViewPagerVerbsAdapter(getSupportFragmentManager());
viewPager.setAdapter(adapter);
tabLayout.setupWithViewPager(viewPager);
}
toolbar = findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
}
}
Код ViewPager
public class ViewPagerVerbsAdapter extends FragmentPagerAdapter {
private final int number_of_fragments = 3;
public ViewPagerVerbsAdapter(@NonNull FragmentManager fm) {
super(fm);
}
@NonNull
@Override
public Fragment getItem(int position) {
Log.i("Result", Integer.toString(position));
return ListVerbsFragment.newInstance(position + 1);
}
@Override
public int getCount() {
return 1;
}
@Nullable
@Override
public CharSequence getPageTitle(int position) {
if (position == 1) {
return "favourites";
}
return "verbs";
}
}
Вот что я вижу в логах
2020-06-21 18:37:54.881 23608-23608/com.example.verbs I/MyResult: 278
2020-06-21 18:37:54.882 23608-23608/com.example.verbs I/MyResult: 278