Está en la página 1de 19

Instituto Tecnológico de las Américas

Nombre:
Dalvin David Molina Ogando

Materia:
Introducción al desarrollo de aplicaciones móviles

Grupo:
1

Docente:
Freidy Nuñez Perez

Matrícula:
2018-6683

Tema:
Recycler

Fecha:
6 de noviembre del 2020
TAREA RECYCLER
Crear un listado de alimentos con una imagen por defecto en cada alimento
al frente, agregados por el usuario que se vayan guardando en una base de
datos SQLITE. al dar clic en el me salga un toast con el nombre del
alimento al que se le ha dado clic.

Mainactivity
package com.example.recycle;
import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.widget.Toolbar;
import androidx.viewpager.widget.ViewPager;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.widget.Toast;
import com.example.recycle.BaseDatos.BaseDatos;
import
com.example.recycle.adapterController.AdapterControlle
r;
import com.example.recycle.fragment.fragment_add;
import com.example.recycle.fragment.fragment_list;
import com.google.android.material.tabs.TabLayout;
public class MainActivity extends AppCompatActivity {
ViewPager viewPager;
TabLayout tabLayout;
Toolbar toolbar;
//FRAGMENTS
fragment_list list;
//ADAPTER
AdapterController adapterController;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
viewPager = (ViewPager)
findViewById(R.id.viewpager);
tabLayout = (TabLayout)
findViewById(R.id.tab_layout);
toolbar = findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
fragment_add add = new fragment_add();
list = new fragment_list();
tabLayout.setupWithViewPager(viewPager);
adapterController = new
AdapterController(getSupportFragmentManager(),
tabLayout.getTabCount());
adapterController.addFragment(list,"List");
adapterController.addFragment(add,"Add");
//set view tab
viewPager.setAdapter(adapterController);
tabLayout.setOnTabSelectedListener(new
TabLayout.OnTabSelectedListener() {
@Override
public void onTabSelected(TabLayout.Tab tab)
{
list.actualizar();
}
@Override
public void onTabUnselected(TabLayout.Tab
tab) {
}
@Override
public void onTabReselected(TabLayout.Tab
tab) {
}
});
}
}

fragment add:
package com.example.recycle.fragment;
import android.content.ContentValues;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import androidx.core.content.ContextCompat;
import androidx.fragment.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Toast;
import com.example.recycle.BaseDatos.BaseDatos;
import com.example.recycle.R;
import
com.example.recycle.entityAlimentos.ModeloAlimentos;
import
com.google.android.material.button.MaterialButton;
import
com.google.android.material.textfield.TextInputLayout;
public class fragment_add extends Fragment {
SQLiteDatabase db;
View view;
TextInputLayout tvAdd;
MaterialButton add;
String name;
public fragment_add() {
// Required empty public constructor
}
@Override
public View onCreateView(LayoutInflater inflater,
ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
view = inflater.inflate(R.layout.fragment_add,
container, false);
tvAdd = view.findViewById(R.id.tv_foods);
add = view.findViewById(R.id.btn_addFoods);
add.setOnClickListener(new
View.OnClickListener() {
@Override
public void onClick(View v) {
name =
tvAdd.getEditText().getText().toString().trim();
if(validation(name)){
tvAdd.getEditText().setText("");
BaseDatos dbHelper = new
BaseDatos(getContext(),"Alimentos",null,1);
db = dbHelper.getWritableDatabase();
if (db != null) {
ContentValues cv = new ContentValues();
cv.put("name", name);
db.insert("foods", null, cv);

Toast.makeText(getContext(),"SuccesS!",Toast.LENGTH_SH
ORT).show();
}else{
Toast.makeText(getContext(),"DataBase
not find!",Toast.LENGTH_SHORT).show();
}
}
}
});
return view;
}
private boolean validation(String food){
if(food.isEmpty()){
tvAdd.setError("this input must not empty");
}else{
if(food.length() > 20){
tvAdd.setError("you have exceeded the
number of characters.");
return false;
}else{
BaseDatos dbHelper = new
BaseDatos(getContext(),"Alimentos",null,1);
db = dbHelper.getWritableDatabase();
String[] ok = {food};
if (db != null) {
Cursor fila = db.rawQuery("select
* from foods where name =?", ok);
if(fila.moveToFirst()){
tvAdd.setError("foods
exists!");
}else{
tvAdd.setError(null);
return true;
}
}
}
}
return false;
}
}

fragment list:
package com.example.recycle.fragment;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import androidx.fragment.app.Fragment;
import
androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import
androidx.swiperefreshlayout.widget.SwipeRefreshLayout;
import android.os.Handler;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Toast;
import com.example.recycle.BaseDatos.BaseDatos;
import com.example.recycle.R;
import
com.example.recycle.entityAlimentos.AdapterAlimentos;
import
com.example.recycle.entityAlimentos.ModeloAlimentos;
import java.util.ArrayList;
public class fragment_list extends Fragment {
View view;
AdapterAlimentos adapterAlimentos;
ArrayList<ModeloAlimentos> arrayListFoods;
RecyclerView recyclerView;
LinearLayoutManager layoutManager;
SwipeRefreshLayout refreshLayout;
public fragment_list() {
// Required empty public constructor
}
@Override
public View onCreateView(LayoutInflater inflater,
ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
view = inflater.inflate(R.layout.fragment_list,
container, false);
recyclerView =
view.findViewById(R.id.recycleView);
refreshLayout = view.findViewById(R.id.refresh);
arrayListFoods = new ArrayList<>();
BaseDatos admin = new
BaseDatos(getContext(),"Alimentos",null,1);
SQLiteDatabase db = admin.getWritableDatabase();
Cursor fila = db.rawQuery("select * from foods",
null);
if(fila.moveToFirst()){
do {
arrayListFoods.add(new
ModeloAlimentos(fila.getString(1),R.drawable.foods));
}while(fila.moveToNext());
}
layoutManager = new
LinearLayoutManager(getActivity());
recyclerView.setLayoutManager(layoutManager);
adapterAlimentos = new
AdapterAlimentos(getActivity(),arrayListFoods);

refreshLayout.setOnRefreshListener(new
SwipeRefreshLayout.OnRefreshListener() {
@Override
public void onRefresh() {
actualizar();
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
refreshLayout.setRefreshing(false);
}
},500);
}
});
adapterAlimentos.setOnclickListener(new
View.OnClickListener() {
@Override
public void onClick(View v) {

Toast.makeText(getContext(),arrayListFoods.get(recycle
rView.getChildAdapterPosition(v)).getName(),
Toast.LENGTH_SHORT).show();
}
});
recyclerView.setAdapter(adapterAlimentos);
return view;
}
public void actualizar(){

Toast.makeText(getContext(),"wait...",Toast.LENGTH_SHO
RT).show();
BaseDatos admin = new
BaseDatos(getContext(),"Alimentos",null,1);
SQLiteDatabase db = admin.getWritableDatabase();
Cursor fila = db.rawQuery("select * from foods",
null);
arrayListFoods.clear();
if(fila.moveToFirst()){
do {
arrayListFoods.add(new
ModeloAlimentos(fila.getString(1),R.drawable.foods));
}while(fila.moveToNext());
}
layoutManager = new
LinearLayoutManager(getActivity());
recyclerView.setLayoutManager(layoutManager);
adapterAlimentos = new
AdapterAlimentos(getActivity(),arrayListFoods);
adapterAlimentos.notifyDataSetChanged();
}
}

ModeloAlimentos:
package com.example.recycle.entityAlimentos;
public class ModeloAlimentos {
String name;
int img;
public ModeloAlimentos(String name, int img) {
this.name = name;
this.img = img;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getImg() {
return img;
}
public void setImg(int img) {
this.img = img;
}
}

AdapterAlimentos:
package com.example.recycle.entityAlimentos;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;
import com.example.recycle.R;
import java.util.ArrayList;
public class AdapterAlimentos extends
RecyclerView.Adapter<AdapterAlimentos.MyViewHolder>
implements View.OnClickListener {
ArrayList<ModeloAlimentos> arrayModel;
private View.OnClickListener listener;
public AdapterAlimentos(Context context,
ArrayList<ModeloAlimentos> arrayModel) {
this.arrayModel = arrayModel;
}
@NonNull
@Override
public AdapterAlimentos.MyViewHolder
onCreateViewHolder(@NonNull ViewGroup parent, int
viewType) {
LayoutInflater inflater =
LayoutInflater.from(parent.getContext());
View v =
inflater.inflate(R.layout.design_alimentos,parent,fals
e);
v.setOnClickListener(this);
MyViewHolder mvh = new MyViewHolder(v);
return mvh;
}
@Override
public void onBindViewHolder(@NonNull
AdapterAlimentos.MyViewHolder holder, int position) {
String nameFoods =
arrayModel.get(position).getName();
int imgFoods =
arrayModel.get(position).getImg();
holder.nameFoods.setText(nameFoods);
holder.imgFoods.setImageResource(imgFoods);
}
@Override
public int getItemCount() {
return arrayModel.size();
}
public void setOnclickListener(View.OnClickListener
onclickListener){
this.listener = onclickListener;
}
@Override
public void onClick(View v) {
if(listener != null){
listener.onClick(v);
}
}
public static class MyViewHolder extends
RecyclerView.ViewHolder{
public TextView nameFoods;
public ImageView imgFoods;
public MyViewHolder(@NonNull View itemView) {
super(itemView);
nameFoods =
itemView.findViewById(R.id.name_foods);
imgFoods =
itemView.findViewById(R.id.img_food);
}
}
}

BaseDatos:
package com.example.recycle.BaseDatos;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import androidx.annotation.Nullable;
public class BaseDatos extends SQLiteOpenHelper{
private static final String create = "CREATE TABLE
foods(id INTEGER PRIMARY KEY AUTOINCREMENT, name
TEXT)";
private static final String delete = "DROP TABLE IF
EXISTS foods";
public BaseDatos(@Nullable Context context,
@Nullable String name, @Nullable
SQLiteDatabase.CursorFactory factory, int version) {
super(context, name, factory, version);
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL(create);
}
@Override
public void onUpgrade(SQLiteDatabase db, int
oldVersion, int newVersion) {
db.execSQL(delete);
db.execSQL(create);
}
}
AdapterController:
package com.example.recycle.adapterController;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentManager;
import androidx.fragment.app.FragmentPagerAdapter;
import java.util.ArrayList;
import java.util.List;
public class AdapterController extends
FragmentPagerAdapter {
List<Fragment> fragments = new ArrayList<>();
List<String> fragmentsTitulo = new ArrayList<>();
public AdapterController(@NonNull FragmentManager
fm, int behavior) {
super(fm, behavior);
}
public void addFragment(Fragment fragment, String
title){
fragments.add(fragment);
fragmentsTitulo.add(title);
}
@NonNull
@Override
public Fragment getItem(int position) {
return fragments.get(position);
}
@Override
public int getCount() {
return fragments.size();
}
@Nullable
@Override
public CharSequence getPageTitle(int position) {
return fragmentsTitulo.get(position);
}
}

XML:
activity_main:
<?xml version="1.0" encoding="utf-8"?>
<androidx.coordinatorlayout.widget.CoordinatorLayout
xmlns:android="http://schemas.android.com/apk/res/andr
oid"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<com.google.android.material.appbar.AppBarLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<androidx.appcompat.widget.Toolbar
android:id="@+id/toolbar"
app:title="RecycleView DOM"
app:titleTextColor="#FFFFFF"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="@color/colorPrimaryDark"
/>
<com.google.android.material.tabs.TabLayout
android:id="@+id/tab_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="#7AD7FF"
app:tabTextColor="#000000">
<com.google.android.material.tabs.TabItem
android:id="@+id/tab_list"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
<com.google.android.material.tabs.TabItem
android:id="@+id/tab_add"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
</com.google.android.material.tabs.TabLayout>
</com.google.android.material.appbar.AppBarLayout>
<androidx.viewpager.widget.ViewPager
android:id="@+id/viewpager"
android:layout_width="match_parent"
android:layout_height="match_parent"

app:layout_behavior="com.google.android.material.appba
r.AppBarLayout$ScrollingViewBehavior">
</androidx.viewpager.widget.ViewPager>
</androidx.coordinatorlayout.widget.CoordinatorLayout>

design_alimentos:
<?xml version="1.0" encoding="utf-8"?>
<androidx.coordinatorlayout.widget.CoordinatorLayout
xmlns:android="http://schemas.android.com/apk/res/andr
oid"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<com.google.android.material.appbar.AppBarLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<androidx.appcompat.widget.Toolbar
android:id="@+id/toolbar"
app:title="RecycleView DOM"
app:titleTextColor="#FFFFFF"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="@color/colorPrimaryDark"
/>
<com.google.android.material.tabs.TabLayout
android:id="@+id/tab_layout"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="#7AD7FF"
app:tabTextColor="#000000">
<com.google.android.material.tabs.TabItem
android:id="@+id/tab_list"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
<com.google.android.material.tabs.TabItem
android:id="@+id/tab_add"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
</com.google.android.material.tabs.TabLayout>
</com.google.android.material.appbar.AppBarLayout>
<androidx.viewpager.widget.ViewPager
android:id="@+id/viewpager"
android:layout_width="match_parent"
android:layout_height="match_parent"

app:layout_behavior="com.google.android.material.appba
r.AppBarLayout$ScrollingViewBehavior">
</androidx.viewpager.widget.ViewPager>
</androidx.coordinatorlayout.widget.CoordinatorLayout>

fragment_add:
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/andr
oid"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
xmlns:app="http://schemas.android.com/apk/res-auto"
tools:context=".fragment.fragment_add"
android:background="#7DA9BC"
>

<com.google.android.material.textfield.TextInputLayout
android:id="@+id/tv_foods"

android:background="@drawable/background_inputadd"

style="@style/Widget.MaterialComponents.TextInputLayou
t.OutlinedBox"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:elevation="4dp"
android:layout_marginTop="28dp"
android:hint="Digit Name Foods"
app:counterEnabled="true"
app:counterMaxLength="20"
app:errorEnabled="true"
android:layout_marginHorizontal="14dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.0"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"

app:startIconDrawable="@drawable/ic_add_shopping_cart_
24px"
app:boxCornerRadiusTopStart="4dp"
app:boxCornerRadiusBottomEnd="4dp"
app:boxCornerRadiusBottomStart="4dp"
app:endIconMode="clear_text"
app:boxCornerRadiusTopEnd="4dp"
tools:ignore="MissingConstraints">

<com.google.android.material.textfield.TextInputEditTe
xt
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_margin="6dp"
android:inputType="text"
/>

</com.google.android.material.textfield.TextInputLayou
t>
<com.google.android.material.button.MaterialButton
android:id="@+id/btn_addFoods"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="64dp"
android:text="ADD"
android:textSize="20dp"
android:padding="11dp"
app:rippleColor="#00B947"
app:cornerRadius="4dp"
app:elevation="4dp"
android:textStyle="bold"
android:backgroundTint="#00E676"
android:elegantTextHeight="true"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.498"
app:layout_constraintStart_toStartOf="parent"

app:layout_constraintTop_toBottomOf="@+id/tv_foods"
tools:ignore="MissingConstraints" />
</androidx.constraintlayout.widget.ConstraintLayout>

fragment_list:
<?xml version="1.0" encoding="utf-8"?>
<androidx.coordinatorlayout.widget.CoordinatorLayout
xmlns:android="http://schemas.android.com/apk/res/andr
oid"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
tools:context=".fragment.fragment_list">

<androidx.swiperefreshlayout.widget.SwipeRefreshLayout
android:id="@+id/refresh"
android:layout_width="match_parent"
android:layout_height="match_parent">
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/recycleView"
android:layout_width="match_parent"
android:layout_height="match_parent"/>

</androidx.swiperefreshlayout.widget.SwipeRefreshLayou
t>
</androidx.coordinatorlayout.widget.CoordinatorLayout>

App:

También podría gustarte