· 9 years ago · Nov 09, 2016, 01:00 PM
1public abstract class MenuPageFragment extends Fragment {
2
3protected RecyclerView recyclerView;
4protected RecyclerView.LayoutManager layoutManager;
5protected MenuPageAdapter adapter;
6protected List<MenuPageItems> articles;
7protected Activity activity;
8
9public MenuPageFragment() {
10}
11
12public abstract List<MenuPageItems> getArticles();
13
14public void onCreateView(View v, ViewGroup parent, Bundle savedInstanceState) {
15}
16
17@Override
18public View onCreateView(LayoutInflater inflater, ViewGroup parent, Bundle savedInstanceState) {
19 View v = inflater.inflate(R.layout.viewpager_recyclerview, parent, false);
20 prepareArticles();
21 prepareViews(v);
22 onCreateView(v, parent, savedInstanceState);
23 return v;
24}
25
26private void prepareArticles() {
27 articles = getArticles();
28}
29
30protected void bindViews(View v) {
31 recyclerView = (RecyclerView) v.findViewById(R.id.fragment_container);
32}
33
34protected void prepareViews(View v) {
35 bindViews(v);
36 setupLayoutManager();
37 setupAdapter();
38}
39
40private void setupLayoutManager() {
41 if (getColumnNumber() == 1) {
42 layoutManager = new LinearLayoutManager(activity);
43 } else {
44 layoutManager = new GridLayoutManager(activity, getColumnNumber());
45 }
46 recyclerView.setLayoutManager(layoutManager);
47}
48
49private void setupAdapter() {
50 adapter = new MenuPageAdapter(activity);
51 adapter.addAll(articles);
52 adapter.notifyDataSetChanged();
53 recyclerView.setAdapter(adapter);
54 articles.clear();
55}
56
57/******************************************
58 * Override to create grid recyclerview
59 * @return number of column to be generated
60 ******************************************/
61public int getColumnNumber() {
62 return 1;
63}
64
65@Override
66public void onAttach(Context context) {
67 super.onAttach(context);
68 if (context instanceof Activity) {
69 activity = (Activity) context;
70 }
71}
72
73}
74
75public class MenuPageAdapter extends Adapter<MenuPageHolder> {
76
77public List<MenuPageItems> articles;
78private Activity activity;
79
80public MenuPageAdapter(Activity activity){
81 articles = new ArrayList<>();
82 this.activity = activity;
83}
84
85public void add(MenuPageItems dataModel){
86 articles.add(dataModel);
87}
88
89public void add(MenuPageItems dataModel, int position){
90 articles.add(position, dataModel);
91}
92
93public void addAll(List<MenuPageItems> menuPageItems){
94 articles.addAll(menuPageItems);
95}
96
97@Override
98public MenuPageHolder onCreateViewHolder(ViewGroup parent, int viewType) {
99 View v = LayoutInflater.from(parent.getContext()).inflate(viewType, parent, false);
100 return createViewHolder(v, viewType);
101}
102
103@Override
104public void onBindViewHolder(MenuPageHolder holder, int position) {
105 holder.bind(articles.get(position), activity, position);
106}
107
108@Override
109public int getItemCount() {
110 return articles.size();
111}
112
113@Override
114public int getItemViewType(int position){
115 return articles.get(position).getViewResId();
116}
117
118public int searchViewTypePosition(int viewType){
119 int i = 0;
120 boolean found = false;
121 while(i < articles.size() && !found){
122 if(articles.get(i).getViewResId() == viewType){
123 found = true;
124 i--;
125 }
126 i++;
127 }
128 return i;
129}
130
131public MenuPageHolder createViewHolder(View v, int viewType){
132 return articles.get(searchViewTypePosition(viewType)).createViewHolder(v, activity, this);
133}
134}
135
136public abstract class MenuPageHolder extends RecyclerView.ViewHolder{
137
138protected final Activity activity;
139protected MenuPageAdapter adapter;
140private TextView txtTitle, txtDescription;
141private ImageView imgImage;
142public View view;
143
144public MenuPageHolder(View v, Activity activity, MenuPageAdapter adapter) {
145 super(v);
146
147 this.activity = activity;
148 this.adapter = adapter;
149
150 // declare the views
151 imgImage = (ImageView) v.findViewById(R.id.cardview_image);
152 txtTitle = (TextView) v.findViewById(R.id.cardview_title);
153 txtDescription = (TextView) v.findViewById(R.id.cardview_description);
154 view = v.findViewById(R.id.card_view);
155}
156
157public void bind(MenuPageItems dataModel, Activity activity, final int position) {
158
159 final MenuPageItems menuPageItems = dataModel;
160
161 view.setOnClickListener(new View.OnClickListener() {
162 @Override public void onClick(View v){
163
164 Intent intent = new Intent(view.getContext(), EndpageActivity.class);
165
166 // values to pass to endpage activity
167 intent.putExtra("_id", menuPageItems._id);
168 intent.putExtra("title", menuPageItems.title);
169 intent.putExtra("description", menuPageItems.description);
170 intent.putExtra("article", menuPageItems.article);
171 intent.putExtra("image", menuPageItems.image);
172
173 // start Endpage Activity with values passed
174 view.getContext().startActivity(intent);
175 }
176 });
177
178 // set the pulled content to the views
179 imgImage.setImageResource(menuPageItems.image);
180 txtTitle.setText(menuPageItems.title);
181 txtDescription.setText(menuPageItems.description);
182
183
184}
185}
186
187public class EndpageActivity extends AppCompatActivity {
188
189TextView article;
190ImageView image;
191SQLiteDatabase db;
192
193
194// int sID;
195String sID, sTitle, sDescription, sArticle, sImage;
196
197//CREATE TABLE
198String createDB = "CREATE TABLE IF NOT EXISTS TABLE_ARTICLES"
199 + "(_id INTEGER PRIMARY KEY, "
200 + "title TEXT, "
201 + "description TEXT, "
202 + "article TEXT, "
203 + "image TEXT);";
204
205
206public void onCreate(SQLiteDatabase db) {
207 db.execSQL(createDB);
208
209}
210
211protected void onCreate(Bundle savedInstanceState) {
212 super.onCreate(savedInstanceState);
213
214
215 // get the layout
216 setContentView(R.layout.endpage_layout);
217
218 // get the values passed from favorites
219 Intent intent = getIntent();
220
221 // Get values passed to activity from menu pages fragment
222 sID = intent.getStringExtra("_id");
223 sTitle = intent.getStringExtra("title");
224 sDescription = intent.getStringExtra("description");
225 sArticle = intent.getStringExtra("article");
226 sImage = intent.getStringExtra("image");
227
228 // sets toolbar and page title
229 CollapsingToolbarLayout collapsingToolbar =(CollapsingToolbarLayout) findViewById(R.id.endpage_header);
230 collapsingToolbar.setTitle(sTitle);
231 Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
232 setSupportActionBar(toolbar);
233
234 // this adds the back button arrow to the header
235 getSupportActionBar().setDisplayHomeAsUpEnabled(true);
236
237 // set view contents on Endpage
238 image = (ImageView) findViewById(R.id.endpage_header_image);
239 image.setImageDrawable(getResources().getDrawable(getIntent().getIntExtra("image", 0)));
240
241 article = (TextView)findViewById(R.id.tv_endpage_article);
242 article.setText(sArticle);
243
244 // create the database
245 //db.execSQL(EndpageActivity.CREATE_TB);
246
247
248 /***************************************
249 * FAB Button click to add to favorites
250 ***************************************/
251
252 final FloatingActionButton fab = (FloatingActionButton)findViewById(R.id.fab);
253 fab.setOnClickListener(new View.OnClickListener() {
254 @Override public void onClick(View v){
255
256 // Insert Record to SQLite Database for Favorites List
257 // save(nameEditText.getText().toString());
258
259// db.execSQL(createDB);
260
261 save(String.valueOf(sID),
262 sTitle,
263 sDescription,
264 sArticle,
265 String.valueOf(sImage));
266
267 Toast.makeText(EndpageActivity.this, "'"
268 + sTitle + "' Added To Favorite Articles",
269 Toast.LENGTH_SHORT).show();
270 }
271 });
272}
273
274// Save this article to database for favorites list
275private void save(String _id, String title, String description, String article, String image)
276{
277 DBAdapter db = new DBAdapter(this);
278 db.openDB();
279 db.add(_id, title, description, article, String.valueOf(image));
280
281 db.closeDB();
282
283}
284
285/*************************
286 * Top Right Endpage Menu
287 *************************/
288
289@Override
290public boolean onCreateOptionsMenu(Menu menu) {
291 getMenuInflater().inflate(R.menu.endpage_zoom_menu, menu);
292 return true;
293}
294
295@Override
296public boolean onPrepareOptionsMenu(Menu menu) {
297 switch (AppCompatDelegate.getDefaultNightMode()) {
298 case R.id.menu_font_size_small:
299 menu.findItem(R.id.menu_font_size_small)
300 .setChecked(true);
301 break;
302 case R.id.menu_font_size_medium:
303 menu.findItem(R.id.menu_font_size_medium)
304 .setChecked(true);
305 break;
306 case R.id.menu_font_size_large:
307 menu.findItem(R.id.menu_font_size_small)
308 .setChecked(true);
309 break;
310 }
311 return true;
312}
313
314@Override
315public boolean onOptionsItemSelected(MenuItem item) {
316 switch (item.getItemId()) {
317 case android.R.id.home:
318 finish();
319 return true;
320 case R.id.menu_font_size_small:
321 article.setTextSize(14);
322 break;
323 case R.id.menu_font_size_medium:
324 article.setTextSize(18);
325 break;
326 case R.id.menu_font_size_large:
327 article.setTextSize(22);
328 break;
329 }
330 return super.onOptionsItemSelected(item);
331}
332
333
334}
335
336public class FavoriteArticlesActivity extends AppCompatActivity {
337
338ListView lv;
339ArrayList<FullArticleItem> favoriteArticles = new ArrayList<>();
340FavoritesListAdapter adapter;
341
342@Override
343protected void onCreate(Bundle savedInstanceState) {
344 super.onCreate(savedInstanceState);
345 setContentView(R.layout.favorites_listview_layout);
346 Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
347 setSupportActionBar(toolbar);
348
349 lv= (ListView) findViewById(R.id.lv);
350 adapter=new FavoritesListAdapter(this, favoriteArticles);
351
352 this.getAllArticles();
353}
354
355// RETRIEVE OR GETAllArticles
356private void getAllArticles()
357{
358 favoriteArticles.clear();
359 DBAdapter db = new DBAdapter(this);
360 db.openDB();
361 Cursor c = db.retrieve();
362 FullArticleItem fullArticleItem;
363
364 while (c.moveToNext())
365 {
366 int _id = c.getInt(0);
367 String name = c.getString(1);
368 String description = c.getString(2);
369 String article = c.getString(3);
370 String image = c.getString(4);
371
372 fullArticleItem = new FullArticleItem();
373
374 fullArticleItem.setId(_id);
375 fullArticleItem.setName(name);
376 fullArticleItem.setDescription(description);
377 fullArticleItem.setArticle(article);
378 fullArticleItem.setImage(image);
379
380 favoriteArticles.add(fullArticleItem);
381 }
382
383 db.closeDB();
384 lv.setAdapter(adapter);
385}
386
387private void toEndpage() {
388 // get the article ID
389 int id = adapter.getSelectedItemID();
390
391 DBAdapter db = new DBAdapter(this);
392 db.openDB();
393 Cursor c = db.retrieve();
394 FullArticleItem fullArticleItem;
395
396 while (c.moveToNext()) {
397 int _id = c.getInt(0);
398 String name = c.getString(1);
399 String description = c.getString(2);
400 String article = c.getString(3);
401 String image = c.getString(4);
402 }
403}
404
405private void delete()
406{
407 // get the article ID
408 int id = adapter.getSelectedItemID();
409
410 // DELETE FROM DB
411 DBAdapter db = new DBAdapter(this);
412 db.openDB();
413 boolean deleted = db.delete(id);
414 db.closeDB();
415
416 if(deleted)
417 {
418 getAllArticles();
419 }else {
420 Toast.makeText(this,"Unable To Delete",Toast.LENGTH_SHORT).show();
421 }
422}
423
424@Override
425public boolean onContextItemSelected(MenuItem item) {
426 CharSequence title = item.getTitle();
427
428
429 return super.onContextItemSelected(item);
430}
431}
432
433public class FavoritesListAdapter extends BaseAdapter {
434
435Context c;
436ArrayList<FullArticleItem> favoriteArticles;
437LayoutInflater inflater;
438FullArticleItem fullArticleItem;
439
440public FavoritesListAdapter(Context c, ArrayList<FullArticleItem> favoriteArticles) {
441 this.c = c;
442 this.favoriteArticles = favoriteArticles;
443}
444
445@Override
446public int getCount() {
447 return favoriteArticles.size();
448}
449
450@Override
451public Object getItem(int position) {
452 return favoriteArticles.get(position);
453}
454
455@Override
456public long getItemId(int position) {
457 return position;
458}
459
460@Override
461public View getView(final int position, View convertView, ViewGroup parent) {
462 if(inflater == null)
463 {
464 inflater = (LayoutInflater) c.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
465 }
466 if(convertView == null)
467 {
468 convertView = inflater.inflate(R.layout.menupage_cardview_row,parent,false);
469 }
470
471 // Bind the data to the viewholder
472 FavoritesListViewHolder holder = new FavoritesListViewHolder(convertView);
473 holder.cardviewTitle.setText(favoriteArticles.get(position).getName());
474 holder.cardviewDescription.setText(favoriteArticles.get(position).getDescription());
475
476 convertView.setOnClickListener(new View.OnClickListener() {
477 @Override
478 public void onClick(View v) {
479 Toast.makeText(c, favoriteArticles.get(position).getName(), Toast.LENGTH_SHORT).show();
480 }
481 });
482
483 holder.setLongClickListener(new MyLongClickListListener() {
484 @Override
485 public void onItemLongClick() {
486 fullArticleItem = (FullArticleItem) getItem(position);
487 }
488 });
489
490 return convertView;
491}
492
493//EXPOSE NAME AND ID
494public int getSelectedItemID()
495{
496 return fullArticleItem.getId();
497}
498
499public String getSelectedItemName()
500{
501 return fullArticleItem.getName();
502}
503
504}
505
506public class FavoritesListViewHolder implements View.OnLongClickListener,View.OnCreateContextMenuListener {
507
508TextView cardviewTitle;
509TextView cardviewDescription;
510MyLongClickListListener longClickListener;
511View view;
512
513public FavoritesListViewHolder(View v) {
514
515 cardviewTitle = (TextView) v.findViewById(R.id.cardview_title);
516 cardviewDescription = (TextView) v.findViewById(R.id.cardview_description);
517 view = v.findViewById(R.id.card_view);
518
519
520 view.setOnClickListener(new View.OnClickListener() {
521 @Override public void onClick(View v){
522
523 // place class to recieve the data and pass data to endpage activity
524 }
525 });
526
527 v.setOnLongClickListener(this);
528 v.setOnCreateContextMenuListener(this);
529}
530
531@Override
532public boolean onLongClick(View v) {
533 this.longClickListener.onItemLongClick();
534 return false;
535}
536
537public void setLongClickListener(MyLongClickListListener longClickListener)
538{
539 this.longClickListener = longClickListener;
540}
541
542@Override
543public void onCreateContextMenu(ContextMenu menu, View v, ContextMenu.ContextMenuInfo menuInfo) {
544 menu.setHeaderTitle("Action : ");
545 menu.add(0, 0, 0, "NEW");
546 menu.add(0,1,0,"EDIT");
547 menu.add(0,2,0,"DELETE");
548
549
550}
551}