Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- public class AppViewModel extends ViewModel {
- public LiveData<PagedList<RusOther>> rusOtherList; //Коллекция для хранения данных типа RusOther
- public LiveData<PagedList<OtherRus>> otherRusList; //Коллекция для хранения данных типа OtherRus
- public AppViewModel() {
- }
- //Получение данных из таблицы RusOther
- public void initRusOther(RusOtherDao rusOtherDao) {
- PagedList.Config pagedListConfig=(new PagedList.Config.Builder()).setEnablePlaceholders(true)
- .setPrefetchDistance(100)
- .setPageSize(50).build();
- rusOtherList = new LivePagedListBuilder<>(
- rusOtherDao.getAllRusOtherWords(), pagedListConfig).build();
- }
- //Получение данных из таблицы OtherRus
- public void initOtherRus(OtherRusDao otherRusDao) {
- PagedList.Config pagedListConfig=(new PagedList.Config.Builder()).setEnablePlaceholders(true)
- .setPrefetchDistance(100)
- .setPageSize(50).build();
- otherRusList = new LivePagedListBuilder<>(
- otherRusDao.getAllOtherRusWords(), pagedListConfig).build();
- }
- }
- public class RusOtherAdapter extends PagedListAdapter<RusOther, RusOtherAdapter.RusOtherHolder> {
- //Объявляем интерфейс для нажатия на элемент списка
- private OnItemClickListener mItemClickListener;
- //Объявляем интерфейс для нажатия на кнопку избранное на элементе
- private OnItemFavoritesClick favoritesClick;
- //В конструктор передаем переменную интерфейса
- public RusOtherAdapter(OnItemFavoritesClick favoritesClick) {
- super(DIFF_CALLBACK);
- this.favoritesClick = favoritesClick; //инициализация обработчика нажатия на кнопку Избранное
- }
- //Интерфейс для обработки нажатия на сам элемент списка
- public interface OnItemClickListener {
- void onItemClick(long id);
- }
- public void setOnItemClickListener(final RusOtherAdapter.OnItemClickListener mItemClickListener) {
- this.mItemClickListener = mItemClickListener;
- }
- class RusOtherHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
- private TextView txtWord;
- private TextView txtTranslation;
- private ImageButton btnFavorites;
- private OnItemFavoritesClick favoritesClick;
- private RusOtherHolder(final View view, OnItemFavoritesClick favoritesClick) {
- super(view);
- txtWord = view.findViewById(R.id.txtWord);
- txtTranslation = view.findViewById(R.id.txtTranslation);
- btnFavorites = itemView.findViewById(R.id.btnFavorites);
- itemView.setOnClickListener(this);
- this.favoritesClick = favoritesClick; //инициализация обработчика нажатия на кнопку Избранное
- //Нажатие на кнопку Избранное на элементе
- btnFavorites.setOnClickListener(v -> this.favoritesClick.favClick(getAdapterPosition(), getItem(getAdapterPosition()).getId(), getItem(getAdapterPosition()).getFavorites()));
- }
- @Override
- public void onClick(View view) {
- switch (view.getId()) {
- default:
- mItemClickListener.onItemClick(getItem(getAdapterPosition()).getId());
- }
- }
- private void bindTo(RusOther word) {
- txtWord.setText(word.getWord());
- txtTranslation.setText(word.getTranslation());
- //Избранное или нет
- int fav = word.getFavorites();
- if (fav == 1) { //Если слово в избранном, то помечаем элемент желтой звездочкой
- btnFavorites.setImageResource(R.drawable.ic_star_yellow);
- } else { //иначе, черной
- btnFavorites.setImageResource(R.drawable.ic_star_black);
- }
- }
- }
- /*@Override
- public void submitList(PagedList<RusOther> pagedList) {
- super.submitList(pagedList);
- }*/
- @Override
- @NonNull
- public RusOtherHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
- LayoutInflater li = LayoutInflater.from(parent.getContext());
- View view = li.inflate(R.layout.item, parent, false);
- return new RusOtherHolder(view, favoritesClick);
- }
- @Override
- public void onBindViewHolder(@NonNull RusOtherHolder holder, int position) {
- RusOther word = getItem(position);
- if(word != null) {
- holder.bindTo(word);
- }
- }
- public static DiffUtil.ItemCallback<RusOther> DIFF_CALLBACK =
- new DiffUtil.ItemCallback<RusOther>() {
- @Override
- public boolean areItemsTheSame(@NonNull RusOther oldWord,
- @NonNull RusOther newWord) {
- return oldWord.getId() == newWord.getId();
- }
- @Override
- public boolean areContentsTheSame(@NonNull RusOther oldWord,
- @NonNull RusOther newWord) {
- return oldWord.equals(newWord);
- }
- };
- }
- public class MainActivity extends AppCompatActivity
- implements NavigationView.OnNavigationItemSelectedListener,
- RusOtherAdapter.OnItemClickListener, OtherRusAdapter.OnItemClickListener, OnItemFavoritesClick {
- private AppViewModel viewModel;
- private RecyclerView rvList;
- private TextView txtLeftLang;
- private TextView txtRightLang;
- private ImageButton btnChangeLang;
- private boolean isOtherRight; //При запуске приложения False
- RusOtherDao rusOtherDao;
- OtherRusDao otherRusDao;
- @Override
- protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.activity_main);
- ***
- //Получаем DAO для таблицы RusOther
- rusOtherDao = AppDatabase.createPersistentDatabase(this).rusOtherDao();
- //Получаем DAO для таблицы OtherRus
- otherRusDao = AppDatabase.createPersistentDatabase(this).otherRusDao();
- viewModel = ViewModelProviders.of(this).get(AppViewModel.class);
- initRusOtherAdapter();
- btnChangeLang.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- txtRightLang.setText(isOtherRight? getResources().getString(R.string.other_lang):getResources().getString(R.string.rus_lang));
- txtLeftLang.setText(isOtherRight? getResources().getString(R.string.rus_lang):getResources().getString(R.string.other_lang));
- if (isOtherRight) { //перевод с русского на другой
- initRusOtherAdapter();
- } else { // перевод с другого на русский
- initOtherRusAdapter();
- }
- isOtherRight = !isOtherRight;
- }
- });
- }
- @Override
- public void favClick(int pos, int itemID, int fav) {
- if (isOtherRight) { //Если перевод с другого на русский язык
- } else { //Если перевод с русского на другой язык
- if (fav == 1) { //Убираем из избранного
- otherRusDao.updateRecipeByID(0, itemID);
- //Toast.makeText(MainActivity.this, getResources().getString(R.string.text_delete_favorite), Toast.LENGTH_SHORT).show();
- }
- if (fav == 0) { //Добавляем в избранное
- otherRusDao.updateRecipeByID(1, itemID);
- //Toast.makeText(MainActivity.this, getResources().getString(R.string.text_add_favorite), Toast.LENGTH_SHORT).show();
- }
- }
- }
- //Метод выводит данные из БД из таблицы RusOther в RecyclerView
- private void initRusOtherAdapter() {
- viewModel.initRusOther(rusOtherDao);
- RusOtherAdapter adapter = new RusOtherAdapter(this);
- rvList.setAdapter(adapter);
- adapter.setOnItemClickListener(this);
- viewModel.rusOtherList.observe(this, adapter::submitList);
- }
- //Метод выводит данные из БД из таблицы OtherRus в RecyclerView
- private void initOtherRusAdapter() {
- viewModel.initOtherRus(otherRusDao);
- OtherRusAdapter adapter = new OtherRusAdapter(this);
- rvList.setAdapter(adapter);
- adapter.setOnItemClickListener(this);
- viewModel.otherRusList.observe(this, adapter::submitList);
- }
- @Override
- public void onItemClick(long id) {
- Toast.makeText(this, id + "", Toast.LENGTH_LONG).show();
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement