Wednesday, May 11, 2016

Customized Row with SQLite & Edit , Delete Functionality --- Mini App

" Jai Saraswati Maa" 
Hi ... Dear All ..Today I am uploading a superb example of Customized List View with Edit & Delete Functionality on each Row - Reflecting with SQLite DataBase.

***** Please refer  first my previous post 

Registration & Login Simple One  


http://androidclue4u.blogspot.in/2016/04/registration-login-simple-one.html


**** It's Just a Mini App you can add such functionality with your App.
**** Please have a patience.

FirstName i am taken as userName for login Purpose.

Please check.
I am using Android Studio 1.5.1
Minimun SDK API 19
Target SDK API 23
Please Like us & put your valuable suggestions in comment box.

A. Output Screen Will be like ---
1.       First Screen on Which you have all options ... Please Register First 


2      Registration   Form   
      

3    Login Screen 
   


4    View All Saved data in a List with Buttons 
    


5   If you click on Edit so you can change First Name & Last Name  only ....
  





B.  All xml files are 
1.   activity_main.xml   

  <?xml version="1.0" encoding="utf-8"?>

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"

    xmlns:tools="http://schemas.android.com/tools"

    android:layout_width="match_parent"

    android:layout_height="match_parent"

    android:paddingBottom="@dimen/activity_vertical_margin"

    android:paddingLeft="@dimen/activity_horizontal_margin"

    android:paddingRight="@dimen/activity_horizontal_margin"

    android:paddingTop="@dimen/activity_vertical_margin"

    tools:context="com.exam.ravi.customlistwithbutton.MainActivity">

    <Button        android:layout_width="wrap_content"

        android:layout_height="wrap_content"

        android:text="Login"

        android:id="@+id/logBut"

        android:onClick="logUser"

        android:layout_alignParentTop="true"

        android:layout_centerHorizontal="true"

        android:layout_marginTop="54dp" />

    <Button        android:layout_width="wrap_content"

        android:layout_height="wrap_content"

        android:text="New User"

        android:id="@+id/newuserBut"

        android:onClick="registerUser"

        android:layout_below="@+id/logBut"

        android:layout_alignEnd="@+id/logBut"

        android:layout_marginTop="75dp" />

    <Button        android:layout_width="wrap_content"

        android:layout_height="wrap_content"

        android:text="ViewAll"

        android:id="@+id/button2"

        android:layout_below="@+id/newuserBut"

        android:layout_centerHorizontal="true"

        android:layout_marginTop="65dp"

        android:onClick="viewAll" />
</RelativeLayout>

2. loglay.xml
<?xml version="1.0" encoding="utf-8"?>

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"

    android:layout_width="match_parent" android:layout_height="match_parent">

    <EditText        android:layout_width="wrap_content"

        android:layout_height="wrap_content"

        android:id="@+id/logUser"

        android:layout_alignParentTop="true"

        android:layout_alignParentStart="true"

        android:layout_marginTop="54dp"

        android:hint="UserName"

        android:layout_alignParentEnd="true" />

    <EditText        android:layout_width="wrap_content"

        android:layout_height="wrap_content"

        android:id="@+id/logPass"        android:layout_below="@+id/logUser"

        android:layout_alignParentStart="true"

        android:layout_marginTop="40dp"

        android:hint="Password"

        android:inputType="textPassword"

        android:layout_alignEnd="@+id/logUser" />

    <Button        android:layout_width="wrap_content"

        android:layout_height="wrap_content"

        android:text="Login Me"

        android:id="@+id/button"

        android:layout_centerVertical="true"

        android:layout_centerHorizontal="true"

        android:onClick="loginUser" />
</RelativeLayout>

3. reguser.xml
<?xml version="1.0" encoding="utf-8"?>

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"

    android:orientation="vertical" android:layout_width="match_parent"

    android:layout_height="match_parent">

    <EditText        android:layout_width="wrap_content"

        android:layout_height="wrap_content"

        android:id="@+id/fName"

        android:layout_alignParentTop="true"

        android:layout_alignParentStart="true"

        android:layout_marginTop="58dp"

        android:hint="First Name"

        android:layout_alignParentEnd="true" />

    <EditText        android:layout_width="wrap_content"

        android:layout_height="wrap_content"

        android:id="@+id/lName"

        android:layout_below="@+id/fName"

        android:layout_alignParentStart="true"

        android:layout_marginTop="42dp"

        android:hint="Last Name"        android:layout_alignParentEnd="true" />

    <EditText        android:layout_width="wrap_content"

        android:layout_height="wrap_content"

        android:inputType="textPassword"

        android:ems="10"        android:id="@+id/userPass"

        android:layout_centerVertical="true"

        android:hint=" Password "        android:layout_alignParentStart="true"

        android:layout_alignParentEnd="true" />

    <Button        android:layout_width="wrap_content"

        android:layout_height="wrap_content"

        android:text="Register"

        android:id="@+id/regist"

        android:layout_below="@+id/userPass"

        android:layout_centerHorizontal="true"

        android:layout_marginTop="50dp"

        android:onClick="regMe"/>
</RelativeLayout>

4. single_row.xml

<?xml version="1.0" encoding="utf-8"?>

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"

    android:layout_width="match_parent" android:layout_height="match_parent">
<LinearLayout    android:layout_width="match_parent"

    android:layout_height="wrap_content"

    android:orientation="horizontal"    >
   <LinearLayout       android:layout_width="wrap_content"

       android:layout_height="wrap_content"

       android:orientation="vertical"

       android:layout_weight="2">
    <TextView        android:layout_width="wrap_content"

        android:layout_height="wrap_content"

        android:textAppearance="?android:attr/textAppearanceLarge"

        android:text="Large Text"

        android:id="@+id/textFname"

        android:layout_alignParentTop="true"

        android:layout_alignParentStart="true" />

    <TextView        android:layout_width="wrap_content"

        android:layout_height="wrap_content"

        android:textAppearance="?android:attr/textAppearanceLarge"

        android:text="Large Text"

        android:id="@+id/textLname"

        android:layout_below="@+id/textView"

        android:layout_alignParentStart="true" />
   </LinearLayout>
      <LinearLayout

          android:layout_width="wrap_content"

          android:layout_height="wrap_content"

          android:orientation="horizontal">
          <Button           android:layout_width="wrap_content"

           android:layout_height="wrap_content"

           android:layout_weight="1"

           android:text="Delete"

           android:id="@+id/rowDel"/>
          <Button              android:layout_width="wrap_content"

              android:layout_height="wrap_content"

              android:layout_weight="1"

              android:text="Edit"              android:id="@+id/rowEdit"/>

      </LinearLayout>
</LinearLayout>
</RelativeLayout>

5. viewalllay.xml  

<?xml version="1.0" encoding="utf-8"?>

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"

    android:layout_width="match_parent" android:layout_height="match_parent">

    <ListView        android:layout_width="wrap_content"

        android:layout_height="wrap_content"

        android:id="@+id/listView"

        android:layout_alignParentTop="true"

        android:layout_alignParentStart="true" />
</RelativeLayout>

6. edit_lay.xml
<?xml version="1.0" encoding="utf-8"?>

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"

    android:layout_width="match_parent"

    android:layout_height="match_parent">
    <EditText

        android:layout_width="wrap_content"

        android:layout_height="wrap_content"

        android:id="@+id/fChname"

        android:layout_alignParentTop="true"

        android:layout_alignParentStart="true"

        android:layout_marginTop="58dp"

        android:hint="First Name"        android:layout_alignParentEnd="true" />

    <EditText        android:layout_width="wrap_content"

        android:layout_height="wrap_content"

        android:id="@+id/lChname"

        android:hint="Last Name"

        android:layout_below="@+id/fChname"

        android:layout_alignParentStart="true"

        android:layout_marginTop="60dp"

        android:layout_alignParentEnd="true" />

    <Button        android:layout_width="wrap_content"

        android:layout_height="wrap_content"

        android:text="Change"

        android:id="@+id/chButton"

        android:layout_below="@+id/lChname"

        android:layout_centerHorizontal="true"

        android:layout_marginTop="77dp" />
</RelativeLayout>
C. Java Code 
1.   MainActivity.java is as 
package com.exam.ravi.customlistwithbutton;

import android.content.Intent;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;


public class MainActivity extends AppCompatActivity {

    @Override    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

    }
   public void logUser(View view)
    {
        startActivity(new Intent(this, Login.class));
    }


    public void  registerUser(View view)
      {
        startActivity(new Intent(this,RegUser.class));
      }
    public void  viewAll(View view)
    {
        startActivity(new Intent(this,ViewAll.class));
    }
}

2. Login.java 

package com.exam.ravi.customlistwithbutton;

import android.database.Cursor;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.EditText;
import android.widget.Toast;


public class Login  extends AppCompatActivity {
    EditText EdLogUser, EdLogPass;
    String user, pass;

    @Override    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.loglay);
        EdLogUser = (EditText) findViewById(R.id.logUser);
        EdLogPass = (EditText) findViewById(R.id.logPass);
    }

    public void loginUser(View view) {
        user = EdLogUser.getText().toString();
        pass = EdLogPass.getText().toString();
        MyHelp myHelp = new MyHelp(this);
        Cursor crob = myHelp.getInfo(myHelp);
        crob.moveToFirst();
        boolean logstatus = false;
        String NAME = "";
        do {
            if ((user.equals(crob.getString(0))) && (pass.equals(crob.getString(1)))) 
            {
                logstatus = true;
                NAME = crob.getString(0);
            }
        } while (crob.moveToNext());
        if (logstatus) {
         Toast.makeText(getBaseContext(), "Login Success .. . \n Welcome " + NAME, 
                           Toast.LENGTH_LONG).show();
           finish();
        } else {
        Toast.makeText(getBaseContext(), "Login Failed \n Please Check your detail",
                         Toast.LENGTH_LONG).show();
         finish();
        }
    }
}

3. RegUser.java  
package com.exam.ravi.customlistwithbutton;

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.EditText;
import android.widget.Toast;

public class RegUser extends AppCompatActivity
{
   EditText EdFname,EdLname,EdPass;
    String sFname,sLname,sPass;
    @Override    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.reguser);
        EdFname = (EditText) findViewById(R.id.fName);
        EdLname = (EditText) findViewById(R.id.lName);
        EdPass = (EditText) findViewById(R.id.userPass);
    }
    public void regMe(View view)
    {
        sFname = EdFname.getText().toString();
        sLname = EdLname.getText().toString();
        sPass = EdPass.getText().toString();
        MyHelp myob = new MyHelp(this);
        myob.putInfo(myob, sFname, sLname,sPass);
        Toast.makeText(RegUser.this, "Registered Successfully....",
                                    Toast.LENGTH_SHORT).show();
        finish();

    }
}
4. ViewAll.java 
package com.exam.ravi.customlistwithbutton;

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.widget.ListView;

import java.util.ArrayList;

public class ViewAll  extends AppCompatActivity {
    ArrayList<DisInfo> showData;
    MyAdapter adapter;
    @Override    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.viewalllay);
        MyHelp myHelper = new MyHelp(this);
        showData= myHelper.getAllRows(myHelper);
        adapter= new MyAdapter(this,R.layout.single_row,showData);
        ListView listView = (ListView) findViewById(R.id.listView);
        listView.setAdapter(adapter);

    }
}

5. DisInfo.java 
package com.exam.ravi.customlistwithbutton;

/** * Created by Ravi on 4/28/2016. */public class DisInfo {
    String dis_fname;
    String dis_lname;
    String dis_pass;

    public String getDis_fname() {
        return dis_fname;
    }

    public void setDis_fname(String dis_fname) {
        this.dis_fname = dis_fname;
    }

    public String getDis_lname() {
        return dis_lname;
    }

    public void setDis_lname(String dis_lname) {
        this.dis_lname = dis_lname;
    }

    public String getDis_pass() {
        return dis_pass;
    }

    public void setDis_pass(String dis_pass) {
        this.dis_pass = dis_pass;
    }
}

6. Edit_Act.java   
package com.exam.ravi.customlistwithbutton;

import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;

public class Edit_Act  extends AppCompatActivity {

    Context context =this;
    EditText EdFName,EdLName,EdPass;
    String getFName,getLName,pass;
    Button change;
    @Override    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.edit_lay);
        EdFName = (EditText) findViewById(R.id.fChname);
        EdLName = (EditText) findViewById(R.id.lChname);
        Intent iget = getIntent();
        getFName = iget.getStringExtra("tit");
        getLName = iget.getStringExtra("des");
        pass = iget.getStringExtra("pass");
        EdFName.setText(getFName);
        EdLName.setText(getLName);
        change = (Button) findViewById(R.id.chButton);
        change.setOnClickListener(new View.OnClickListener() {
            @Override            public void onClick(View v) {
                MyHelp myob = new MyHelp(context);
                myob.updateInfo(myob,pass,EdFName.getText().toString(),
                                   EdLName.getText().toString());
                Intent intent = new Intent(Edit_Act.this, ViewAll.class);
                startActivity(intent);
                finish();
            }
        });


    }
}

7. MyAdapter.java 

package com.exam.ravi.customlistwithbutton;

import android.app.Activity;
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;

import java.io.ByteArrayInputStream;
import java.util.ArrayList;


public class MyAdapter extends ArrayAdapter<DisInfo> {

    Context context;
    String ret_fname,ret_lname,ret_pass;
    String newUser;
    int layoutResourceId;
    ArrayList<DisInfo> data = new ArrayList<DisInfo>();

    public MyAdapter(Context context, int layoutResourceId, ArrayList<DisInfo> data) 
    {
        super(context, layoutResourceId, data);
        this.layoutResourceId = layoutResourceId;
        this.context = context;
        this.data = data;
    }

    @Override

    public View getView(final int position, View convertView, ViewGroup parent) {
        View row = convertView;
        Holder holder = null;
        if(row == null)
        {
            LayoutInflater inflater = ((Activity)context).getLayoutInflater();
            row = inflater.inflate(layoutResourceId, parent, false);
            holder = new Holder();
            holder.txtTitle = (TextView)row.findViewById(R.id.textFname);
            holder.txtDesc = (TextView)row.findViewById(R.id.textLname);
            holder.butDel = (Button) row.findViewById(R.id.rowDel);
            holder.butEdit = (Button) row.findViewById(R.id.rowEdit);
            row.setTag(holder);
        }
        else        {
            holder = (Holder)row.getTag();
        }
        DisInfo picture = data.get(position);
        ret_fname = picture.dis_fname;
        ret_lname = picture.dis_lname;
        ret_pass = picture.dis_pass;
        holder.txtTitle.setText(ret_fname);
        holder.txtDesc.setText(ret_lname);
        holder.butDel.setOnClickListener(new View.OnClickListener() {
            @Override            public void onClick(View v) {
                DisInfo picture = data.get(position);
                ret_fname = picture.dis_fname;
                ret_pass = picture.dis_pass;
                MyHelp myob = new MyHelp(context);
                myob.deleteUser(myob, ret_fname, ret_pass);
                Intent intent = new Intent(context, MainActivity.class);
                context.startActivity(intent);
            }
        });

        holder.butEdit.setOnClickListener(new View.OnClickListener() {
            @Override            public void onClick(View v)
            {
                Intent iob = new Intent(context,Edit_Act.class);
                DisInfo picture = data.get(position);
                ret_fname = picture.dis_fname;
                ret_lname = picture.dis_lname;
                ret_pass = picture.dis_pass;
                iob.putExtra("tit", ret_fname);
                iob.putExtra("des",ret_lname);
                iob.putExtra("pass",ret_pass);
                context.startActivity(iob);
            }
        });
        return  row;
    }
    static class Holder
    {
        TextView txtTitle;
        TextView txtDesc;
        Button butDel,butEdit;

    }
}

8. MyHelp.java

package com.exam.ravi.customlistwithbutton;

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;
import android.widget.Toast;

import java.util.ArrayList;


public class MyHelp  extends SQLiteOpenHelper {
    public static final String KEY_ID="_id";
    private static final String DB_NAME="cont.db";
    private static final String TAB_NAME="info";
    private static final int DB_VER=1;
    private static final  String CREATE_QUERY = "create table " + TAB_NAME + " ( " +
      KEY_ID +" integer primary key autoincrement, " +
     UserInfo.F_NAME + " text not null, " + UserInfo.L_NAME + " text not null, " +
                    UserInfo.PASS + " text not null);";

    Context ctx;
    public MyHelp(Context context)
    {
        super(context,DB_NAME,null,DB_VER);
        ctx=context;
    }
    @Override    public void onCreate(SQLiteDatabase sdb) {

        sdb.execSQL(CREATE_QUERY);
        Log.d("rrrr", "oncreate");
    }

    @Override

    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) 
       {
        db.execSQL("DROP TABLE IF EXISTS " + TAB_NAME);
        Log.d("rrrr", "onupgrade");
        onCreate(db);

    }
    public  void putInfo(MyHelp mob,String fname,String lname,String pass)
    {
        SQLiteDatabase SQ= mob.getWritableDatabase();
        ContentValues CV=new ContentValues();
        CV.put(UserInfo.F_NAME, fname);
        CV.put(UserInfo.L_NAME, lname);
        CV.put(UserInfo.PASS, pass);
        SQ.insert(TAB_NAME, null, CV);
    }
    public Cursor getInfo(MyHelp mob)
    {
        SQLiteDatabase SQ= mob.getWritableDatabase();
        String cols[]={UserInfo.F_NAME,UserInfo.PASS};
        Cursor CR= SQ.query(TAB_NAME,cols,null,null,null,null,null); 
        return  CR;
    }

    public void deleteUser(MyHelp mob,String username,String userpass)
    {
     String selection = UserInfo.F_NAME + " LIKE ? AND " + UserInfo.PASS + " LIKE ?";
        String args[]={username,userpass};
        SQLiteDatabase SQ = mob.getWritableDatabase();
        SQ.delete(TAB_NAME,selection,args);

    }
    public void updateInfo(MyHelp mob,String pass,
                                    String newuserFname,String newuserLname)
    {
        SQLiteDatabase SQ = mob.getWritableDatabase();
        String selection = UserInfo.PASS + " LIKE ? ";
        String args[]={pass};
        ContentValues CV = new ContentValues();
        CV.put(UserInfo.F_NAME,newuserFname);
        CV.put(UserInfo.L_NAME,newuserLname);
        SQ.update(TAB_NAME, CV, selection, args);

    }
    public ArrayList<DisInfo> getAllRows(MyHelp mob)
    {
        ArrayList<DisInfo> data = new ArrayList<DisInfo>();
        SQLiteDatabase SQ = mob.getReadableDatabase();
        String col[] = {UserInfo.F_NAME,UserInfo.L_NAME,UserInfo.PASS};
        Cursor cob = SQ.query(TAB_NAME,col,null,null,null,null,null);
        if(cob!=null)
        {
            cob.moveToFirst();
            do {
                DisInfo displayData = new DisInfo();
                displayData.setDis_fname(cob.getString(0));
                displayData.setDis_lname(cob.getString(1));
                displayData.setDis_pass(cob.getString(2));
                data.add(displayData);
            }while(cob.moveToNext());
        }
        Toast.makeText(ctx, "Retrieved", Toast.LENGTH_LONG).show();

        return data;
    }
}

9. UserInfo.java 
package com.exam.ravi.customlistwithbutton;


public class UserInfo {
     public static final String F_NAME = "f_name";
    public static final  String L_NAME = "l_name";
    public static final  String PASS = "pass";
} 

4 comments:

  1. Great Example Sir, I've been looking for this everywhere Now i can add more functionality into my project <3 :)

    ReplyDelete
  2. Thanks Vipul..... I know what my students want........ Thanks.....

    ReplyDelete
  3. Thanks for all your information.Website is very nice and informative content.


    Personalised Phone Covers

    ReplyDelete
  4. Thanks Martinez for your valuable feedback...........

    ReplyDelete