This simple example demonstrates using RecyclerView in combination with an SQLite database to manage and display user data. Here's a summary:
MainActivity:
- Contains input fields for user details and buttons to insert, delete, or view the data.
- Interacts with
DBHelper
to manage SQLite operations.
DBHelper:
- Manages database operations like inserting, deleting, and fetching user data.
- Uses
SQLiteOpenHelper
for table creation and updates.
MyAdapter:
- A custom adapter for
RecyclerView
that binds data fetched from the SQLite database to a UI layout (userentry.xml
).
- A custom adapter for
Userlist Activity:
- Displays the list of users fetched from the database in a
RecyclerView
. - Populates the
RecyclerView
using theMyAdapter
.
- Displays the list of users fetched from the database in a
Layouts:
activity_main.xml
: User interface for adding, deleting, and viewing data.activity_userlist.xml
: Contains theRecyclerView
for displaying user data.userentry.xml
: A card view layout for individual items in theRecyclerView
.
The code snippet for MainActivity.java is as below:
package com.codingtutorials.recyclerviewexample;
import androidx.appcompat.app.AppCompatActivity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity {
EditText name, email, age;
Button insert, view, delete;
DBHelper DB;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
name = findViewById(R.id.name);
email= findViewById(R.id.email);
age = findViewById(R.id.age);
insert = findViewById(R.id.btnInsert);
view = findViewById(R.id.btnView);
delete = findViewById(R.id.btnDelete);
DB = new DBHelper(this);
view.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
startActivity(new Intent(MainActivity.this, Userlist.class));
}
});
insert.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String nameTXT = name.getText().toString();
String emailTXT = email.getText().toString();
String ageTXT = age.getText().toString();
Boolean checkinsertdata = DB.insertuserdata(nameTXT, emailTXT, ageTXT);
if(checkinsertdata==true)
{
Toast.makeText(MainActivity.this, "New Entry Inserted", Toast.LENGTH_SHORT).show();
}
else
{
Toast.makeText(MainActivity.this, "New Entry Not Inserted", Toast.LENGTH_SHORT).show();
}
}
});
delete.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String nameTXT = name.getText().toString();
Boolean checkdeletedata = DB.deleteuserdata(nameTXT);
if(checkdeletedata==true)
{
Toast.makeText(MainActivity.this, "Entry Deleted", Toast.LENGTH_SHORT).show();
}
else
{
Toast.makeText(MainActivity.this, "Entry Not Deleted", Toast.LENGTH_SHORT).show();
}
} });
}}
The code snippet for DBHelper.java is as below:
package com.codingtutorials.recyclerviewexample;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
public class DBHelper extends SQLiteOpenHelper {
public DBHelper(Context context) {
super(context, "Userdata.db", null, 1);
}
@Override
public void onCreate(SQLiteDatabase DB) {
DB.execSQL("create Table Userdetails(name TEXT primary key, email TEXT, age TEXT)");
}
@Override
public void onUpgrade(SQLiteDatabase DB, int i, int ii) {
DB.execSQL("drop Table if exists Userdetails");
}
public Boolean insertuserdata(String name, String email, String age)
{
SQLiteDatabase DB = this.getWritableDatabase();
ContentValues contentValues = new ContentValues();
contentValues.put("name", name);
contentValues.put("email", email);
contentValues.put("age", age);
long result = DB.insert("Userdetails", null, contentValues);
if(result==-1)
{
return false;
}
else
{
return true;
}
}
public Cursor getdata()
{
SQLiteDatabase DB = this.getWritableDatabase();
Cursor cursor = DB.rawQuery("Select * from Userdetails", null);
return cursor;
}
public Boolean deleteuserdata(String name)
{
SQLiteDatabase DB = this.getWritableDatabase();
Cursor cursor = DB.rawQuery("Select * from Userdetails where name = ?", new String[]{name});
if(cursor.getCount()>0)
{
long result = DB.delete("Userdetails", "name=?", new String[]{name});
if(result==-1)
{
return false;
}
else
{
return true;
}
}
else
{
return false;
}
}
}
The code snippet for MyAdapter.java is as below:
package com.codingtutorials.recyclerviewexample;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;
import java.util.ArrayList;
public class MyAdapter extends RecyclerView.Adapter {
private Context context;
private ArrayList name_id, email_id, age_id;
public MyAdapter(Context context, ArrayList name_id, ArrayList email_id, ArrayList age_id) {
this.context = context;
this.name_id = name_id;
this.email_id = email_id;
this.age_id = age_id;
}
@NonNull
@Override
public MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View v = LayoutInflater.from(context).inflate(R.layout.userentry,parent,false);
return new MyViewHolder(v);
}
@Override
public void onBindViewHolder(@NonNull MyViewHolder holder, int position) {
holder.name_id.setText(String.valueOf(name_id.get(position)));
holder.email_id.setText(String.valueOf(email_id.get(position)));
holder.age_id.setText(String.valueOf(age_id.get(position)));
}
@Override
public int getItemCount() {
return name_id.size();
}
public class MyViewHolder extends RecyclerView.ViewHolder {
TextView name_id, email_id, age_id;
public MyViewHolder(@NonNull View itemView) {
super(itemView);
name_id = itemView.findViewById(R.id.textname);
email_id = itemView.findViewById(R.id.textemail);
age_id = itemView.findViewById(R.id.textage);
}
}
}
The code snippet for Userlist.java is as below:
package com.codingtutorials.recyclerviewexample;
import android.database.Cursor;
import android.os.Bundle;
import android.widget.Toast;
import androidx.appcompat.app.AppCompatActivity;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import java.util.ArrayList;
public class Userlist extends AppCompatActivity {
RecyclerView recyclerView;
ArrayList name, email, age;
DBHelper DB;
MyAdapter adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_userlist);
DB = new DBHelper(this);
name = new ArrayList<>();
email = new ArrayList<>();
age = new ArrayList<>();
recyclerView = findViewById(R.id.recyclerview);
adapter = new MyAdapter(this, name, email, age);
recyclerView.setAdapter(adapter);
recyclerView.setLayoutManager(new LinearLayoutManager(this));
displaydata();
}
private void displaydata()
{
Cursor cursor = DB.getdata();
if(cursor.getCount()==0)
{
Toast.makeText(Userlist.this, "No Entry Exists", Toast.LENGTH_SHORT).show();
return;
}
else
{
while(cursor.moveToNext())
{
name.add(cursor.getString(0));
email.add(cursor.getString(1));
age.add(cursor.getString(2));
}
}
}
}
Its time to make some UI now. The code snippet for activity_main.xml is below:
package com.codingtutorials.recyclerviewexample; import androidx.appcompat.app.AppCompatActivity; import android.content.Intent; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.Toast; public class MainActivity extends AppCompatActivity { EditText name, email, age; Button insert, view, delete; DBHelper DB; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); name = findViewById(R.id.name); email= findViewById(R.id.email); age = findViewById(R.id.age); insert = findViewById(R.id.btnInsert); view = findViewById(R.id.btnView); delete = findViewById(R.id.btnDelete); DB = new DBHelper(this); view.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { startActivity(new Intent(MainActivity.this, Userlist.class)); } }); insert.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { String nameTXT = name.getText().toString(); String emailTXT = email.getText().toString(); String ageTXT = age.getText().toString(); Boolean checkinsertdata = DB.insertuserdata(nameTXT, emailTXT, ageTXT); if(checkinsertdata==true) { Toast.makeText(MainActivity.this, "New Entry Inserted", Toast.LENGTH_SHORT).show(); } else { Toast.makeText(MainActivity.this, "New Entry Not Inserted", Toast.LENGTH_SHORT).show(); } } }); delete.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { String nameTXT = name.getText().toString(); Boolean checkdeletedata = DB.deleteuserdata(nameTXT); if(checkdeletedata==true) { Toast.makeText(MainActivity.this, "Entry Deleted", Toast.LENGTH_SHORT).show(); } else { Toast.makeText(MainActivity.this, "Entry Not Deleted", Toast.LENGTH_SHORT).show(); } } }); }}
package com.codingtutorials.recyclerviewexample; import android.content.ContentValues; import android.content.Context; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteOpenHelper; public class DBHelper extends SQLiteOpenHelper { public DBHelper(Context context) { super(context, "Userdata.db", null, 1); } @Override public void onCreate(SQLiteDatabase DB) { DB.execSQL("create Table Userdetails(name TEXT primary key, email TEXT, age TEXT)"); } @Override public void onUpgrade(SQLiteDatabase DB, int i, int ii) { DB.execSQL("drop Table if exists Userdetails"); } public Boolean insertuserdata(String name, String email, String age) { SQLiteDatabase DB = this.getWritableDatabase(); ContentValues contentValues = new ContentValues(); contentValues.put("name", name); contentValues.put("email", email); contentValues.put("age", age); long result = DB.insert("Userdetails", null, contentValues); if(result==-1) { return false; } else { return true; } } public Cursor getdata() { SQLiteDatabase DB = this.getWritableDatabase(); Cursor cursor = DB.rawQuery("Select * from Userdetails", null); return cursor; } public Boolean deleteuserdata(String name) { SQLiteDatabase DB = this.getWritableDatabase(); Cursor cursor = DB.rawQuery("Select * from Userdetails where name = ?", new String[]{name}); if(cursor.getCount()>0) { long result = DB.delete("Userdetails", "name=?", new String[]{name}); if(result==-1) { return false; } else { return true; } } else { return false; } } }
package com.codingtutorials.recyclerviewexample; import android.content.Context; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.TextView; import androidx.annotation.NonNull; import androidx.recyclerview.widget.RecyclerView; import java.util.ArrayList; public class MyAdapter extends RecyclerView.Adapter{ private Context context; private ArrayList name_id, email_id, age_id; public MyAdapter(Context context, ArrayList name_id, ArrayList email_id, ArrayList age_id) { this.context = context; this.name_id = name_id; this.email_id = email_id; this.age_id = age_id; } @NonNull @Override public MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { View v = LayoutInflater.from(context).inflate(R.layout.userentry,parent,false); return new MyViewHolder(v); } @Override public void onBindViewHolder(@NonNull MyViewHolder holder, int position) { holder.name_id.setText(String.valueOf(name_id.get(position))); holder.email_id.setText(String.valueOf(email_id.get(position))); holder.age_id.setText(String.valueOf(age_id.get(position))); } @Override public int getItemCount() { return name_id.size(); } public class MyViewHolder extends RecyclerView.ViewHolder { TextView name_id, email_id, age_id; public MyViewHolder(@NonNull View itemView) { super(itemView); name_id = itemView.findViewById(R.id.textname); email_id = itemView.findViewById(R.id.textemail); age_id = itemView.findViewById(R.id.textage); } } }
package com.codingtutorials.recyclerviewexample; import android.database.Cursor; import android.os.Bundle; import android.widget.Toast; import androidx.appcompat.app.AppCompatActivity; import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.RecyclerView; import java.util.ArrayList; public class Userlist extends AppCompatActivity { RecyclerView recyclerView; ArrayListname, email, age; DBHelper DB; MyAdapter adapter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_userlist); DB = new DBHelper(this); name = new ArrayList<>(); email = new ArrayList<>(); age = new ArrayList<>(); recyclerView = findViewById(R.id.recyclerview); adapter = new MyAdapter(this, name, email, age); recyclerView.setAdapter(adapter); recyclerView.setLayoutManager(new LinearLayoutManager(this)); displaydata(); } private void displaydata() { Cursor cursor = DB.getdata(); if(cursor.getCount()==0) { Toast.makeText(Userlist.this, "No Entry Exists", Toast.LENGTH_SHORT).show(); return; } else { while(cursor.moveToNext()) { name.add(cursor.getString(0)); email.add(cursor.getString(1)); age.add(cursor.getString(2)); } } } }
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
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"
android:padding="10dp">
<TextView
android:id="@+id/text"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Please enter your details"
android:textSize="24dp"
android:layout_marginTop="24dp"/>
<EditText
android:id="@+id/name"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textSize="24dp"
android:layout_below="@+id/text"
android:hint="Name"/>
<EditText
android:id="@+id/email"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textSize="24dp"
android:layout_below="@+id/name"
android:hint="E-mail"/>
<EditText
android:id="@+id/age"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textSize="24dp"
android:layout_below="@id/email"
android:hint="Age"/>
<Button
android:id="@+id/btnInsert"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Insert Data"
android:textSize="24dp"
android:layout_below="@+id/age"
android:layout_marginTop="20dp"/>
<Button
android:id="@+id/btnView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="View Data"
android:textSize="24dp"
android:layout_below="@+id/btnInsert"
android:layout_marginTop="20dp"/>
<Button
android:id="@+id/btnDelete"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Delete Data"
android:textSize="24dp"
android:layout_below="@+id/btnView"
android:layout_marginTop="20dp"/>
</RelativeLayout>
The code snippet for activity_userlist.xml is below:
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
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=".Userlist">
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/recyclerview"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
</androidx.constraintlayout.widget.ConstraintLayout>
The code snippet for userentry.xml is below:
<?xml version="1.0" encoding="utf-8"?>
<androidx.cardview.widget.CardView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
xmlns:app="http://schemas.android.com/apk/res-auto"
app:cardElevation="12dp"
app:cardCornerRadius="16dp"
android:layout_margin="16dp"
android:backgroundTint="#efefef">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="16dp"
android:orientation="vertical">
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:layout_gravity="center_vertical">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Name: "
android:textSize="24dp"
android:textColor="@color/black"
style="bold"/>
<TextView
android:id="@+id/textname"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="24dp"
android:textColor="@color/black"
style="bold"/>
</LinearLayout>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:layout_gravity="center_vertical">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="E-mail: "
android:textSize="24dp"
android:textColor="@color/black"
style="bold"/>
<TextView
android:id="@+id/textemail"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="24dp"
android:textColor="@color/black"
style="bold"/>
</LinearLayout>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:layout_gravity="center_vertical">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Age: "
android:textSize="24dp"
android:textColor="@color/black"
style="bold"/>
<TextView
android:id="@+id/textage"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="24dp"
android:textColor="@color/black"
style="bold"/>
</LinearLayout>
</LinearLayout>
</androidx.cardview.widget.CardView>
The code snippet for AndroidManifest.xml is as below:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools">
<application
android:allowBackup="true"
android:dataExtractionRules="@xml/data_extraction_rules"
android:fullBackupContent="@xml/backup_rules"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/Theme.RecyclerViewExample"
tools:targetApi="31">
<activity
android:name=".Userlist"
android:exported="false" />
<activity
android:name=".MainActivity"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
Comments
Post a Comment