Advertisement
Guest User

Untitled

a guest
Jun 26th, 2019
69
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 9.04 KB | None | 0 0
  1. public class AppViewModel extends ViewModel {
  2.  
  3. public LiveData<PagedList<RusOther>> rusOtherList; //Коллекция для хранения данных типа RusOther
  4. public LiveData<PagedList<OtherRus>> otherRusList; //Коллекция для хранения данных типа OtherRus
  5.  
  6. public AppViewModel() {
  7. }
  8.  
  9. //Получение данных из таблицы RusOther
  10. public void initRusOther(RusOtherDao rusOtherDao) {
  11. PagedList.Config pagedListConfig=(new PagedList.Config.Builder()).setEnablePlaceholders(true)
  12. .setPrefetchDistance(100)
  13. .setPageSize(50).build();
  14.  
  15. rusOtherList = new LivePagedListBuilder<>(
  16. rusOtherDao.getAllRusOtherWords(), pagedListConfig).build();
  17. }
  18.  
  19. //Получение данных из таблицы OtherRus
  20. public void initOtherRus(OtherRusDao otherRusDao) {
  21. PagedList.Config pagedListConfig=(new PagedList.Config.Builder()).setEnablePlaceholders(true)
  22. .setPrefetchDistance(100)
  23. .setPageSize(50).build();
  24.  
  25. otherRusList = new LivePagedListBuilder<>(
  26. otherRusDao.getAllOtherRusWords(), pagedListConfig).build();
  27. }
  28. }
  29.  
  30. public class RusOtherAdapter extends PagedListAdapter<RusOther, RusOtherAdapter.RusOtherHolder> {
  31.  
  32. //Объявляем интерфейс для нажатия на элемент списка
  33. private OnItemClickListener mItemClickListener;
  34. //Объявляем интерфейс для нажатия на кнопку избранное на элементе
  35. private OnItemFavoritesClick favoritesClick;
  36.  
  37. //В конструктор передаем переменную интерфейса
  38. public RusOtherAdapter(OnItemFavoritesClick favoritesClick) {
  39. super(DIFF_CALLBACK);
  40. this.favoritesClick = favoritesClick; //инициализация обработчика нажатия на кнопку Избранное
  41. }
  42.  
  43.  
  44.  
  45. //Интерфейс для обработки нажатия на сам элемент списка
  46. public interface OnItemClickListener {
  47. void onItemClick(long id);
  48. }
  49.  
  50. public void setOnItemClickListener(final RusOtherAdapter.OnItemClickListener mItemClickListener) {
  51. this.mItemClickListener = mItemClickListener;
  52. }
  53.  
  54. class RusOtherHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
  55. private TextView txtWord;
  56. private TextView txtTranslation;
  57. private ImageButton btnFavorites;
  58. private OnItemFavoritesClick favoritesClick;
  59.  
  60. private RusOtherHolder(final View view, OnItemFavoritesClick favoritesClick) {
  61. super(view);
  62. txtWord = view.findViewById(R.id.txtWord);
  63. txtTranslation = view.findViewById(R.id.txtTranslation);
  64. btnFavorites = itemView.findViewById(R.id.btnFavorites);
  65. itemView.setOnClickListener(this);
  66.  
  67. this.favoritesClick = favoritesClick; //инициализация обработчика нажатия на кнопку Избранное
  68.  
  69. //Нажатие на кнопку Избранное на элементе
  70. btnFavorites.setOnClickListener(v -> this.favoritesClick.favClick(getAdapterPosition(), getItem(getAdapterPosition()).getId(), getItem(getAdapterPosition()).getFavorites()));
  71. }
  72.  
  73. @Override
  74. public void onClick(View view) {
  75. switch (view.getId()) {
  76. default:
  77. mItemClickListener.onItemClick(getItem(getAdapterPosition()).getId());
  78. }
  79. }
  80.  
  81. private void bindTo(RusOther word) {
  82. txtWord.setText(word.getWord());
  83. txtTranslation.setText(word.getTranslation());
  84.  
  85. //Избранное или нет
  86. int fav = word.getFavorites();
  87.  
  88. if (fav == 1) { //Если слово в избранном, то помечаем элемент желтой звездочкой
  89. btnFavorites.setImageResource(R.drawable.ic_star_yellow);
  90. } else { //иначе, черной
  91. btnFavorites.setImageResource(R.drawable.ic_star_black);
  92. }
  93.  
  94. }
  95. }
  96.  
  97. /*@Override
  98. public void submitList(PagedList<RusOther> pagedList) {
  99. super.submitList(pagedList);
  100. }*/
  101.  
  102. @Override
  103. @NonNull
  104. public RusOtherHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
  105. LayoutInflater li = LayoutInflater.from(parent.getContext());
  106. View view = li.inflate(R.layout.item, parent, false);
  107. return new RusOtherHolder(view, favoritesClick);
  108. }
  109.  
  110. @Override
  111. public void onBindViewHolder(@NonNull RusOtherHolder holder, int position) {
  112. RusOther word = getItem(position);
  113. if(word != null) {
  114. holder.bindTo(word);
  115. }
  116. }
  117.  
  118. public static DiffUtil.ItemCallback<RusOther> DIFF_CALLBACK =
  119. new DiffUtil.ItemCallback<RusOther>() {
  120. @Override
  121. public boolean areItemsTheSame(@NonNull RusOther oldWord,
  122. @NonNull RusOther newWord) {
  123. return oldWord.getId() == newWord.getId();
  124. }
  125.  
  126. @Override
  127. public boolean areContentsTheSame(@NonNull RusOther oldWord,
  128. @NonNull RusOther newWord) {
  129. return oldWord.equals(newWord);
  130. }
  131. };
  132.  
  133. }
  134.  
  135. public class MainActivity extends AppCompatActivity
  136. implements NavigationView.OnNavigationItemSelectedListener,
  137. RusOtherAdapter.OnItemClickListener, OtherRusAdapter.OnItemClickListener, OnItemFavoritesClick {
  138.  
  139. private AppViewModel viewModel;
  140.  
  141. private RecyclerView rvList;
  142.  
  143. private TextView txtLeftLang;
  144. private TextView txtRightLang;
  145. private ImageButton btnChangeLang;
  146. private boolean isOtherRight; //При запуске приложения False
  147.  
  148. RusOtherDao rusOtherDao;
  149. OtherRusDao otherRusDao;
  150.  
  151. @Override
  152. protected void onCreate(Bundle savedInstanceState) {
  153. super.onCreate(savedInstanceState);
  154. setContentView(R.layout.activity_main);
  155. ***
  156.  
  157. //Получаем DAO для таблицы RusOther
  158. rusOtherDao = AppDatabase.createPersistentDatabase(this).rusOtherDao();
  159.  
  160. //Получаем DAO для таблицы OtherRus
  161. otherRusDao = AppDatabase.createPersistentDatabase(this).otherRusDao();
  162.  
  163. viewModel = ViewModelProviders.of(this).get(AppViewModel.class);
  164.  
  165. initRusOtherAdapter();
  166.  
  167. btnChangeLang.setOnClickListener(new View.OnClickListener() {
  168. @Override
  169. public void onClick(View v) {
  170.  
  171. txtRightLang.setText(isOtherRight? getResources().getString(R.string.other_lang):getResources().getString(R.string.rus_lang));
  172. txtLeftLang.setText(isOtherRight? getResources().getString(R.string.rus_lang):getResources().getString(R.string.other_lang));
  173.  
  174. if (isOtherRight) { //перевод с русского на другой
  175. initRusOtherAdapter();
  176. } else { // перевод с другого на русский
  177. initOtherRusAdapter();
  178. }
  179.  
  180. isOtherRight = !isOtherRight;
  181. }
  182. });
  183.  
  184. }
  185.  
  186. @Override
  187. public void favClick(int pos, int itemID, int fav) {
  188. if (isOtherRight) { //Если перевод с другого на русский язык
  189.  
  190. } else { //Если перевод с русского на другой язык
  191. if (fav == 1) { //Убираем из избранного
  192. otherRusDao.updateRecipeByID(0, itemID);
  193. //Toast.makeText(MainActivity.this, getResources().getString(R.string.text_delete_favorite), Toast.LENGTH_SHORT).show();
  194. }
  195.  
  196. if (fav == 0) { //Добавляем в избранное
  197. otherRusDao.updateRecipeByID(1, itemID);
  198. //Toast.makeText(MainActivity.this, getResources().getString(R.string.text_add_favorite), Toast.LENGTH_SHORT).show();
  199. }
  200. }
  201. }
  202.  
  203. //Метод выводит данные из БД из таблицы RusOther в RecyclerView
  204. private void initRusOtherAdapter() {
  205. viewModel.initRusOther(rusOtherDao);
  206.  
  207. RusOtherAdapter adapter = new RusOtherAdapter(this);
  208. rvList.setAdapter(adapter);
  209. adapter.setOnItemClickListener(this);
  210.  
  211. viewModel.rusOtherList.observe(this, adapter::submitList);
  212.  
  213. }
  214.  
  215. //Метод выводит данные из БД из таблицы OtherRus в RecyclerView
  216. private void initOtherRusAdapter() {
  217. viewModel.initOtherRus(otherRusDao);
  218.  
  219. OtherRusAdapter adapter = new OtherRusAdapter(this);
  220. rvList.setAdapter(adapter);
  221. adapter.setOnItemClickListener(this);
  222.  
  223. viewModel.otherRusList.observe(this, adapter::submitList);
  224.  
  225. }
  226.  
  227. @Override
  228. public void onItemClick(long id) {
  229. Toast.makeText(this, id + "", Toast.LENGTH_LONG).show();
  230. }
  231.  
  232.  
  233.  
  234. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement