Advertisement
Guest User

Untitled

a guest
Jun 18th, 2019
73
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 13.46 KB | None | 0 0
  1. @Entity(tableName = "ruseng") //Описывает таблицу в БД
  2. public class RusOther {
  3. @PrimaryKey(autoGenerate = true) //Система сама будет инкрементировать это поле в БД
  4. @ColumnInfo(typeAffinity = INTEGER)
  5. private int id;
  6. @ColumnInfo(typeAffinity = TEXT)
  7. private String word;
  8. @ColumnInfo(typeAffinity = TEXT)
  9. private String translation;
  10. @ColumnInfo(typeAffinity = INTEGER)
  11. private int favorites;
  12.  
  13. public int getId() {
  14. return id;
  15. }
  16.  
  17. public void setId(int id) {
  18. this.id = id;
  19. }
  20.  
  21. public String getWord() {
  22. return word;
  23. }
  24.  
  25. public void setWord(String word) {
  26. this.word = word;
  27. }
  28.  
  29. public String getTranslation() {
  30. return translation;
  31. }
  32.  
  33. public void setTranslation(String translation) {
  34. this.translation = translation;
  35. }
  36.  
  37. public int getFavorites() {
  38. return favorites;
  39. }
  40.  
  41. public void setFavorites(int favorites) {
  42. this.favorites = favorites;
  43. }
  44.  
  45. public RusOther(int id, String word, String translation, int favorites) {
  46. this.id = id;
  47. this.word = word;
  48. this.translation = translation;
  49. this.favorites = favorites;
  50. }
  51. }
  52.  
  53. @Entity(tableName = "engrus") //Описывает таблицу в БД
  54. public class OtherRus {
  55. @PrimaryKey(autoGenerate = true) //Система сама будет инкрементировать это поле в БД
  56. @ColumnInfo(typeAffinity = INTEGER)
  57. private int id;
  58. @ColumnInfo(typeAffinity = TEXT)
  59. private String word;
  60. @ColumnInfo(typeAffinity = TEXT)
  61. private String translation;
  62. @ColumnInfo(typeAffinity = INTEGER)
  63. private int favorites;
  64.  
  65. public int getId() {
  66. return id;
  67. }
  68.  
  69. public void setId(int id) {
  70. this.id = id;
  71. }
  72.  
  73. public String getWord() {
  74. return word;
  75. }
  76.  
  77. public void setWord(String word) {
  78. this.word = word;
  79. }
  80.  
  81. public String getTranslation() {
  82. return translation;
  83. }
  84.  
  85. public void setTranslation(String translation) {
  86. this.translation = translation;
  87. }
  88.  
  89. public int getFavorites() {
  90. return favorites;
  91. }
  92.  
  93. public void setFavorites(int favorites) {
  94. this.favorites = favorites;
  95. }
  96.  
  97. public OtherRus(int id, String word, String translation, int favorites) {
  98. this.id = id;
  99. this.word = word;
  100. this.translation = translation;
  101. this.favorites = favorites;
  102. }
  103. }
  104.  
  105. @Dao
  106. public interface RusOtherDao {
  107.  
  108. @Query("SELECT * FROM ruseng")
  109. LiveData<List<RusOther>> getAllRusOtherWords(); //Через LiveData мы наблюдаем за списком и обновляем его при изменениях
  110.  
  111. @Query("SELECT * FROM ruseng WHERE id = :id")
  112. RusOther getRusOtherByID(long id);
  113. }
  114.  
  115. @Dao
  116. public interface OtherRusDao {
  117.  
  118. @Query("SELECT * FROM engrus")
  119. LiveData<List<OtherRus>> getAllOtherRusWords(); //Через LiveData мы наблюдаем за списком и обновляем его при изменениях
  120.  
  121. @Query("SELECT * FROM engrusWHERE id = :id")
  122. OtherRus getOtherRusByID(long id);
  123. }
  124.  
  125. public class AppViewModel extends AndroidViewModel {
  126.  
  127. private AppDatabase appDataBase;
  128.  
  129. public AppViewModel(Application application) {
  130. super(application);
  131. appDataBase = AppDatabase.createPersistentDatabase(this.getApplication());
  132. }
  133.  
  134. //Получение всех слов с русского на другой язык
  135. public LiveData<List<RusOther>> getAllRusOtherWords(){
  136. return appDataBase.rusOtherDao().getAllRusOtherWords();
  137. }
  138.  
  139. //Получение всех слов с другого на русский язык
  140. public LiveData<List<OtherRus>> getAllOtherRusWords(){
  141. return appDataBase.otherRusDao().getAllOtherRusWords();
  142. }
  143.  
  144. public RusOther getByRusOtherId(long id){
  145. return appDataBase.rusOtherDao().getRusOtherByID(id);
  146. }
  147. }
  148.  
  149. public class OtherRusAdapter extends RecyclerView.Adapter<OtherRusAdapter.WordViewHolder> implements Filterable {
  150.  
  151. private List<OtherRus> mWords;
  152. private List<OtherRus> mFilteredList;
  153. private Context mContext;
  154.  
  155. RusOtherAdapter.OnItemClickListener mItemClickListener;
  156.  
  157. public interface OnItemClickListener {
  158. void onItemClick(long id);
  159. }
  160.  
  161. public void setOnItemClickListener(final RusOtherAdapter.OnItemClickListener mItemClickListener) {
  162. this.mItemClickListener = mItemClickListener;
  163. }
  164.  
  165. class WordViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
  166.  
  167. private final TextView txtWord;
  168.  
  169. private WordViewHolder(final View itemView) {
  170. super(itemView);
  171. txtWord = itemView.findViewById(R.id.txtWord);
  172. itemView.setOnClickListener(this);
  173. }
  174.  
  175. @Override
  176. public void onClick(View view) {
  177. switch (view.getId()) {
  178. default:
  179. mItemClickListener.onItemClick(mFilteredList.get(getAdapterPosition()).getId());
  180. }
  181. }
  182. }
  183.  
  184. public OtherRusAdapter(Context context, List<OtherRus> mWords) {
  185. this.mWords = mWords;
  186. this.mFilteredList = mWords;
  187. this.mContext = context;
  188. }
  189.  
  190. @Override
  191. public WordViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
  192. View v = LayoutInflater.from(mContext).inflate(R.layout.item,parent,false);
  193. WordViewHolder vh = new WordViewHolder(v);
  194. return vh;
  195. }
  196.  
  197. @Override
  198. public void onBindViewHolder(WordViewHolder holder, int position) {
  199. final OtherRus word = mFilteredList.get(position);
  200. holder.txtWord.setText(word.getWord());
  201. }
  202.  
  203. @Override
  204. public int getItemCount() {
  205. return mFilteredList.size();
  206. }
  207.  
  208. @Override
  209. public Filter getFilter() {
  210. return new Filter() {
  211. @Override
  212. protected FilterResults performFiltering(CharSequence charSequence) {
  213.  
  214. String charString = charSequence.toString();
  215.  
  216. if (charString.isEmpty()) {
  217.  
  218. mFilteredList = mWords;
  219. } else {
  220.  
  221. List<OtherRus> filteredList = new ArrayList<>();
  222.  
  223. for (OtherRus word : mWords) {
  224.  
  225. if (word.getWord().toLowerCase().contains(charString)) {
  226.  
  227. filteredList.add(word);
  228. }
  229. }
  230.  
  231. mFilteredList = filteredList;
  232. }
  233.  
  234. FilterResults filterResults = new FilterResults();
  235. filterResults.values = mFilteredList;
  236. return filterResults;
  237. }
  238.  
  239. @Override
  240. protected void publishResults(CharSequence charSequence, FilterResults filterResults) {
  241. mFilteredList = (List<OtherRus>) filterResults.values;
  242. notifyDataSetChanged();
  243. }
  244. };
  245. }
  246. }
  247.  
  248. public class MainActivity extends AppCompatActivity
  249. implements NavigationView.OnNavigationItemSelectedListener, RusOtherAdapter.OnItemClickListener, OtherRusAdapter.OnItemClickListener {
  250.  
  251. private AppViewModel viewModel;
  252.  
  253. private RecyclerView rvList;
  254. RusOtherAdapter rusOtherAdapter;
  255. OtherRusAdapter otherRusAdapter;
  256.  
  257. private TextView txtLeftLang;
  258. private TextView txtRightLang;
  259. private ImageButton btnChangeLang;
  260. private boolean isOtherRight; //При запуске приложения False
  261.  
  262. @Override
  263. protected void onCreate(Bundle savedInstanceState) {
  264. super.onCreate(savedInstanceState);
  265. setContentView(R.layout.activity_main);
  266. Toolbar toolbar = findViewById(R.id.toolbar);
  267. ***
  268. txtLeftLang = findViewById(R.id.txtLeftLang);
  269. txtRightLang = findViewById(R.id.txtRightLang);
  270. btnChangeLang = findViewById(R.id.btnChangeLang);
  271.  
  272. txtLeftLang.setText(getResources().getString(R.string.rus_lang));
  273. txtRightLang.setText(getResources().getString(R.string.other_lang));
  274.  
  275. rvList = findViewById(R.id.rvList);
  276. rvList.setLayoutManager(new LinearLayoutManager(this));
  277.  
  278. viewModel = ViewModelProviders.of(this).get(AppViewModel.class);
  279.  
  280. viewModel.getAllRusOtherWords().observe(MainActivity.this, new Observer<List<RusOther>>() {
  281. @Override
  282. public void onChanged(@Nullable final List<RusOther> words) {
  283. for (int i = 0; i < words.size(); i++) {
  284. System.out.println(words.get(i).getWord());
  285. }
  286. rusOtherAdapter = new RusOtherAdapter(MainActivity.this, words);
  287. rusOtherAdapter.setOnItemClickListener(MainActivity.this);
  288. rvList.setAdapter(rusOtherAdapter);
  289. }
  290. });
  291.  
  292. btnChangeLang.setOnClickListener(new View.OnClickListener() {
  293. @Override
  294. public void onClick(View v) {
  295.  
  296. txtRightLang.setText(isOtherRight? getResources().getString(R.string.other_lang):getResources().getString(R.string.rus_lang));
  297. txtLeftLang.setText(isOtherRight? getResources().getString(R.string.rus_lang):getResources().getString(R.string.other_lang));
  298.  
  299. if (isOtherRight) { //перевод с русского на другой
  300. rvList.setAdapter(null);
  301. viewModel.getAllRusOtherWords().observe(MainActivity.this, new Observer<List<RusOther>>() {
  302. @Override
  303. public void onChanged(@Nullable final List<RusOther> words) {
  304. rusOtherAdapter = new RusOtherAdapter(MainActivity.this, words);
  305. rusOtherAdapter.setOnItemClickListener(MainActivity.this);
  306. rvList.setAdapter(rusOtherAdapter);
  307. }
  308. });
  309. } else { // перевод с другого на русский
  310. rvList.setAdapter(null);
  311. viewModel.getAllOtherRusWords().observe(MainActivity.this, new Observer<List<OtherRus>>() {
  312. @Override
  313. public void onChanged(@Nullable final List<OtherRus> words) {
  314. otherRusAdapter = new OtherRusAdapter(MainActivity.this, words);
  315. otherRusAdapter.setOnItemClickListener(MainActivity.this);
  316. rvList.setAdapter(otherRusAdapter);
  317. }
  318. });
  319. }
  320.  
  321. isOtherRight = !isOtherRight;
  322. }
  323. });
  324.  
  325. }
  326.  
  327. @Override //Нажатие на элемент списка
  328. public void onItemClick(long id) {
  329. Toast.makeText(this, id + "", Toast.LENGTH_LONG).show();
  330. }
  331.  
  332. public void search(SearchView searchView) {
  333.  
  334. searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
  335. @Override
  336. public boolean onQueryTextSubmit(String query) {
  337.  
  338. return false;
  339. }
  340.  
  341. @Override
  342. public boolean onQueryTextChange(String newText) {
  343. /*if (isOtherRight) {
  344. if (rusOtherAdapter != null) {
  345. rusOtherAdapter.getFilter().filter(newText);
  346. }
  347. } else {
  348. if (otherRusAdapter != null) {
  349. otherRusAdapter.getFilter().filter(newText);
  350. }
  351. }*/
  352. return true;
  353. }
  354. });
  355. }
  356.  
  357.  
  358. }
  359.  
  360. public class ItemAdapter extends RecyclerView.Adapter<ItemAdapter.ItemHolder> {
  361.  
  362. private final int RUSOTHER = 1;
  363. private final int OTHERRUS = 2;
  364. boolean isSecondItem = false;
  365. ArrayList<Item> items;
  366.  
  367. public ItemAdapter (ArrayList<Item> items) {
  368. this.items = items;
  369. }
  370.  
  371. @Override
  372. public ItemHolder onCreateViewHolder(ViewGroup parent, int viewType) {
  373. View v;
  374.  
  375. switch (viewType) {
  376. case RUSOTHER:
  377. v = LayoutInflater.from(parent.getContext()).inflate(R.layout.item, parent, false);
  378. break;
  379. case OTHERRUS:
  380. v = LayoutInflater.from(parent.getContext()).inflate(R.layout.item, parent, false);
  381. break;
  382. default:
  383. v = LayoutInflater.from(parent.getContext()).inflate(R.layout.item, parent, false);
  384. }
  385. return new ItemHolder(v);
  386. }
  387.  
  388. @Override
  389. public void onBindViewHolder(ItemHolder holder, final int position) {
  390. int type = getItemViewType(position);
  391.  
  392. switch (type) {
  393. case RUSOTHER:
  394. RusOther rusOther = (RusOther)items.get(position);
  395. holder.txtWord.setText(rusOther.getWord());
  396. break;
  397. case OTHERRUS:
  398. OtherRus otherRus = (OtherRus)items.get(position);
  399. holder.txtWord.setText(otherRus.getWord());
  400. isSecondItem = true;
  401. break;
  402. }
  403. }
  404.  
  405. @Override
  406. public int getItemViewType(int position) {
  407. int type = items.get(position).getItemType();
  408. if (type == 1) return RUSOTHER;
  409. else return OTHERRUS;
  410.  
  411. }
  412.  
  413. @Override
  414. public int getItemCount() {
  415. return items.size();
  416. }
  417.  
  418. class ItemHolder extends RecyclerView.ViewHolder {
  419. public final TextView txtWord;
  420.  
  421. ItemHolder(View itemView) {
  422. super(itemView);
  423. txtWord = (TextView) itemView.findViewById(R.id.txtWord);
  424. }
  425. }
  426. }
  427.  
  428. public interface Item {
  429. int getItemType ();
  430. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement