Custom Listview with Search and Checkbox

Custom Listview with Search and Checkbox Example:-

Layouts:-

listviewmain.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:background="#0f4c5c"
    android:focusableInTouchMode="true"
    android:orientation="vertical">

    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="20dp"
        android:gravity="center_vertical"
        android:orientation="horizontal" >

        <EditText
            android:id="@+id/edtSearch"
            android:layout_width="0dp"
            android:layout_height="40dp"
            android:layout_marginLeft="5dp"
            android:layout_marginRight="5dp"
            android:layout_weight="1"
             android:textColorHint="#000"
            android:background="@drawable/edittextshape"
            android:drawablePadding="5dp"
            android:focusableInTouchMode="true"
            android:gravity="center_vertical"
            android:paddingLeft="10dp"
            android:hint="SEARCH"
            android:textColor="#000"
            android:inputType="text"
            android:singleLine="true"
            android:textSize="14dp"/>

    </LinearLayout>

    <ListView
        android:id="@+id/listview"
        android:layout_width="fill_parent"
        android:layout_height="0dp"
        android:layout_marginLeft="5dp"
        android:layout_marginRight="5dp"
        android:layout_marginTop="10dp"
        android:layout_weight="1"
        android:divider="@color/list_divider"
        android:dividerHeight="0.5dp"
        android:paddingTop="5dp" />

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical"
        android:layout_gravity="right"
        android:gravity="right">

         <LinearLayout
             android:id="@+id/wrongappro"
             android:layout_width="50dp"
             android:layout_height="50dp"
             android:layout_alignParentBottom="true"
             android:layout_alignParentRight="true"
             android:layout_marginBottom="3dp"
             android:layout_marginRight="14dp"
             android:gravity="center"
             android:orientation="vertical" >
     
           <Button
               android:id="@+id/btnDone"
               android:layout_width="40dp"
               android:layout_height="40dp"
               android:text=""
               android:background="@drawable/roundicon"
               android:textColor="#ff0000"
               android:gravity="center"
               android:textSize="16dp"
               android:textStyle="bold"
               android:layout_gravity="center" />
 </LinearLayout>
 </LinearLayout>
</LinearLayout>

listviewmain_row.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:background="@null"
    android:gravity="center_vertical" >

    <LinearLayout
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:gravity="center_vertical"
        android:orientation="vertical"
        android:padding="10dp" >

        <TextView
            android:id="@+id/txtItemName0"
            android:layout_width="1dp"
            android:layout_height="1dp"
            android:ellipsize="end"
            android:text="No data"
            android:textAllCaps="true"
            android:textColor="#fff"
            android:textSize="13dp"
            android:visibility="invisible" />

        <TextView
            android:id="@+id/txtItemName"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:ellipsize="end"
            android:text="No data"
            android:textAllCaps="true"
            android:textColor="#fff"
            android:textSize="15dp"
            android:textStyle="bold" />
    </LinearLayout>

    <RelativeLayout
        android:layout_width="wrap_content"
        android:layout_height="match_parent"
        android:layout_marginRight="2dp"
        android:layout_marginTop="2dp"
        android:orientation="vertical"
        android:weightSum="2" >

        <ImageView
            android:id="@+id/imgvCheck"
            android:layout_width="30dp"
            android:layout_height="30dp"
            android:layout_weight="1"
            android:contentDescription="@string/app_name"
            android:src="@drawable/selecterfav" />

        <ImageView
            android:id="@+id/txtItemName2"
            android:layout_width="30dp"
            android:layout_height="30dp"
            android:layout_weight="1"
            android:src="@drawable/check" />
    </RelativeLayout>


</LinearLayout>

confirmationbox.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:layout_marginLeft="10dp"
    android:layout_marginRight="10dp"
    android:background="@drawable/redac"
    android:minHeight="150dp"
    android:minWidth="250dp"
    android:orientation="vertical" >

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="50dp"
        android:layout_gravity="center"
        android:background="@drawable/redac"
        android:gravity="center"
        android:orientation="horizontal"
        android:weightSum="2" >

        <TextView
            android:id="@+id/heading"
            android:layout_width="wrap_content"
            android:layout_height="40dp"
            android:layout_gravity="center"
            android:layout_weight="2"
            android:gravity="center"
            android:padding="5dp"
            android:text="Confirmation"
            android:textColor="#000"
            android:textSize="18dp" />
    </LinearLayout>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical" >

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="1dp"
            android:background="#000"
            android:orientation="vertical" >
        </LinearLayout>

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginTop="10dp"
            android:orientation="vertical" >
        </LinearLayout>

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:layout_marginLeft="10dp"
            android:layout_marginRight="10dp"
            android:layout_marginTop="10dp"
            android:gravity="center"
            android:orientation="vertical" >

            <TextView
                android:id="@+id/title"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="Are you sure?"
                android:textColor="#000"
                android:textSize="16dp" />
        </LinearLayout>

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:layout_marginBottom="10dp"
            android:layout_marginTop="10dp"
            android:orientation="horizontal"
            android:weightSum="2" >

            <Button
                android:id="@+id/ok"
                style="?android:attr/buttonStyleSmall"
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:layout_marginBottom="10dp"
                android:layout_marginLeft="10dp"
                android:layout_marginRight="5dp"
                android:layout_weight="1"
                android:background="@drawable/newbuy"
                android:drawablePadding="10dp"
                android:padding="10dp"
                android:singleLine="true"
                android:text="YES"
                android:textColor="#fff"
                android:textSize="13dp"
                android:textStyle="bold" />

            <Button
                android:id="@+id/close"
                style="?android:attr/buttonStyleSmall"
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:layout_marginBottom="10dp"
                android:layout_marginLeft="5dp"
                android:layout_marginRight="10dp"
                android:layout_weight="1"
                android:background="@drawable/newbuy"
                android:drawablePadding="10dp"
                android:padding="10dp"
                android:text="NO"
                android:textColor="#fff"
                android:textSize="13dp"
                android:textStyle="bold" />
        </LinearLayout>
    </LinearLayout>


</LinearLayout>


Java Files:-

ListActivityMain.java

package com.parthiv.listactivitymain;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import com.android.volley.Request;
import com.android.volley.Response;
import com.android.volley.VolleyError;
import com.android.volley.toolbox.JsonArrayRequest;
import com.android.volley.toolbox.StringRequest;

import android.annotation.TargetApi;
import android.app.Activity;
import android.app.Dialog;
import android.app.ProgressDialog;
import android.content.ContentValues;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.graphics.Color;
import android.graphics.Typeface;
import android.graphics.drawable.ColorDrawable;
import android.os.AsyncTask;
import android.os.Build;
import android.os.Bundle;
import android.text.Editable;
import android.text.TextWatcher;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;

public class ListActivityMain extends Activity implements OnClickListener {
private ListView listview;
private ItemAdapter adapter;
private EditText editsearch;
private ArrayList<scheduleItemBean> arrlistItems = new ArrayList<scheduleItemBean>();
int selectionCount = 0;
private Button btnDone;
Typeface tf;
String fontPath = "fonts/Smoolthan Bold.otf";
ProgressDialog mProgressDialog;
String jsonResponse;
int totallength1 = 0;
LinearLayout wrongappro;
String dridd = "";
private DBHelper mHelper;
private SQLiteDatabase dataBase;
int ij = 0;
String remoid;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
this.requestWindowFeature(Window.FEATURE_NO_TITLE);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);

setContentView(R.layout.listviewmain);
tf = Typeface.createFromAsset(getAssets(), fontPath);
mHelper = new DBHelper(this);
this.deleteDatabase(mHelper.DATABASE_NAME);

initializeViews();

new insertlist().execute("");

}

// views=========================================
void initializeViews() {
wrongappro = (LinearLayout) findViewById(R.id.wrongappro);
listview = (ListView) findViewById(R.id.listview);
editsearch = (EditText) findViewById(R.id.edtSearch);
btnDone = (Button) findViewById(R.id.btnDone);
editsearch.setTypeface(tf);
btnDone.setTypeface(tf);
btnDone.setOnClickListener(this);

// Search contact like text enter in edit text.
editsearch.addTextChangedListener(new TextWatcher() {
@Override
public void afterTextChanged(Editable arg0) {
String text = editsearch.getText().toString().toLowerCase();
adapter.filter(text);
}

@Override
public void beforeTextChanged(CharSequence arg0, int arg1,
int arg2, int arg3) {
}

@Override
public void onTextChanged(CharSequence arg0, int arg1, int arg2,
int arg3) {
}
});
}

@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.btnDone:

dridd = "";
mHelper = new DBHelper(this);

dridd = "";

dridd = "";
mHelper = new DBHelper(this);
int profile_counts = mHelper.getProfilesCount();
dridd = "";
if (profile_counts == 0) {

Toast.makeText(getApplicationContext(),
"Please select your Version to continue...", 1000)
.show();
} else {

dataBase = mHelper.getWritableDatabase();
Cursor mCursor = dataBase.rawQuery("SELECT * FROM "
+ DBHelper.TABLE_NAME, null);

if (mCursor.moveToFirst()) {
do {

dridd += ","
+ mCursor.getString(mCursor
.getColumnIndex(DBHelper.KEY_FNAME));
} while (mCursor.moveToNext());
}

final Dialog viewdialog1 = new Dialog(ListActivityMain.this);
viewdialog1.requestWindowFeature(Window.FEATURE_NO_TITLE);
viewdialog1.getWindow().setBackgroundDrawable(
new ColorDrawable(android.graphics.Color.TRANSPARENT));
viewdialog1.setContentView(R.layout.confirmationbox);
viewdialog1.setCancelable(false);
viewdialog1.setCanceledOnTouchOutside(false);

TextView heading = (TextView) viewdialog1
.findViewById(R.id.heading);
heading.setTypeface(tf);

TextView title = (TextView) viewdialog1
.findViewById(R.id.title);
heading.setTypeface(tf);
heading.setText("CONFIRMATION");

title.setText("Want to continue with your selection?");
title.setTypeface(tf);

Button ok = (Button) viewdialog1.findViewById(R.id.ok);
ok.setTypeface(tf);

Button cancel = (Button) viewdialog1.findViewById(R.id.close);
cancel.setTypeface(tf);

cancel.setText("No");
ok.setText("Yes");

cancel.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View v) {
// TODO Auto-generated method stub
viewdialog1.dismiss();

}
});

ok.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View v) {
// TODO Auto-generated method stub

viewdialog1.dismiss();
dridd = dridd.substring(1, dridd.length());
Toast.makeText(getApplicationContext(), "" + dridd,
1000).show();

}
});

viewdialog1.show();

}

break;

default:
break;
}
}

public class ItemAdapter extends BaseAdapter {
private Context mContext;
private LayoutInflater inflater;
public List<scheduleItemBean> arraylistData = null;
private ArrayList<scheduleItemBean> arraylist;

public ItemAdapter(Context context, List<scheduleItemBean> listbean) {
mContext = context;
this.arraylistData = listbean;
inflater = LayoutInflater.from(mContext);

this.arraylist = new ArrayList<scheduleItemBean>();
this.arraylist.addAll(listbean);

}

public class ViewHolder {
TextView txtItemName;
ImageView txtItemName2;
TextView txtItemName0;
ImageView imgvCheck;
}

@Override
public int getCount() {
return arraylistData.size();
}

@Override
public scheduleItemBean getItem(int position) {
return arraylistData.get(position);
}

@Override
public long getItemId(int position) {
return position;
}

@TargetApi(Build.VERSION_CODES.JELLY_BEAN)
public View getView(final int position, View view, ViewGroup parent) {
final ViewHolder holder;
if (view == null) {
holder = new ViewHolder();
view = inflater.inflate(R.layout.listviewmain_row, null);
holder.txtItemName = (TextView) view
.findViewById(R.id.txtItemName);
holder.txtItemName.setTypeface(tf);
holder.txtItemName2 = (ImageView) view
.findViewById(R.id.txtItemName2);

holder.txtItemName0 = (TextView) view
.findViewById(R.id.txtItemName0);
holder.txtItemName0.setTypeface(tf);
holder.imgvCheck = (ImageView) view
.findViewById(R.id.imgvCheck);
view.setTag(holder);

} else {
holder = (ViewHolder) view.getTag();
}

// Set data to view=================================================
try {

scheduleItemBean bean = arraylistData.get(position);

if (bean.isSelected)
holder.imgvCheck.setSelected(true);
else
holder.imgvCheck.setSelected(false);

holder.txtItemName.setText(bean.getItemName());

holder.txtItemName0.setText(bean.getItemName2());

if (bean.getItemName1().equals("0")) {

holder.txtItemName2.setVisibility(View.INVISIBLE);
holder.imgvCheck.setVisibility(View.VISIBLE);

} else {
holder.txtItemName2.setVisibility(View.VISIBLE);
holder.imgvCheck.setVisibility(View.INVISIBLE);

}

holder.txtItemName2.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View v) {
// TODO Auto-generated method stub
scheduleItemBean beans = arraylistData.get(position);
remoid = "" + beans.getItemName2();
}
});

holder.imgvCheck.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View v) {
// TODO Auto-generated method stub
mHelper = new DBHelper(ListActivityMain.this);
for (int i = 0; i < arraylistData.size(); i++) {
scheduleItemBean bean = arraylistData.get(position);
if (i == position) {
if (bean.isSelected()) {

bean.setSelected(false);
dataBase.delete(
DBHelper.TABLE_NAME,
DBHelper.KEY_FNAME + "="
+ bean.getItemName2(), null);

} else {
bean.setSelected(true);
dataBase = mHelper.getWritableDatabase();
ContentValues values = new ContentValues();

values.put(DBHelper.KEY_FNAME,
"" + bean.getItemName2());
dataBase.insert(DBHelper.TABLE_NAME, null,
values);

}

}
notifyDataSetChanged();
}
}
});

holder.imgvCheck.setTag(bean);
} catch (Exception e) {
e.printStackTrace();
}

return view;
}

// Filter Class
public void filter(String charText) {
charText = charText.toLowerCase();
arraylistData.clear();
if (charText.length() == 0) {
arraylistData.addAll(arraylist);

} else {
for (scheduleItemBean contact : arraylist) {
if (contact.getItemName().toLowerCase().contains(charText)) {
arraylistData.add(contact);

}
}
}
notifyDataSetChanged();
}

}

class insertlist extends AsyncTask<String, String, String> {
@SuppressWarnings("deprecation")
protected void onPreExecute() {
super.onPreExecute();

mProgressDialog = new ProgressDialog(ListActivityMain.this);
mProgressDialog.setMessage("Please wait.....");
mProgressDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
mProgressDialog.setCancelable(false);
mProgressDialog.show();

}

protected String doInBackground(String... params) {
String urlJsonArry1;

urlJsonArry1 = "http://androidblog.esy.es/ImageJsonData.php";

try {
JsonArrayRequest req = new JsonArrayRequest(urlJsonArry1,
new Response.Listener<JSONArray>() {
public void onResponse(JSONArray response) {
try {
jsonResponse = "";
totallength1 = response.length();

arrlistItems.clear();

for (int i = 0; i < response.length(); i++) {

JSONObject person = (JSONObject) response
.get(i);

String listid = person.getString("id");

String listversion = ""
+ person.getString("image_title");
String dummy = "0";

scheduleItemBean bean = new scheduleItemBean();
bean.setItemName(listversion);
bean.setItemName1(dummy);
bean.setItemName2(listid);

arrlistItems.add(bean);

}

if (totallength1 == 0) {

Toast.makeText(
getApplicationContext(),
"No Android version has been found...",
1000).show();
mProgressDialog.dismiss();
finish();

} else {

ShowAllContent();
}
} catch (JSONException e) {

Toast.makeText(getApplicationContext(),
"Problem with internet...", 1000)
.show();
mProgressDialog.dismiss();
finish();

}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {

Toast.makeText(getApplicationContext(),
"Problem with internet...", 1000)
.show();
mProgressDialog.dismiss();
finish();

}
});

AppController.getInstance().addToRequestQueue(req);
} catch (Exception e) {
System.out.println("Exception : " + e.getMessage());
}

return null;
}

private void ShowAllContent() {
mProgressDialog.dismiss();

adapter = new ItemAdapter(ListActivityMain.this, arrlistItems);
adapter.notifyDataSetChanged();
listview.setAdapter(adapter);

}

}


}

scheduleItemBean.java

package com.parthiv.listactivitymain;

public class scheduleItemBean {
public String ItemName;

public String ItemName1;

public String ItemName2;

public boolean isSelected;

public String getItemName() {
return ItemName;
}

public String getItemName1() {
return ItemName1;
}

public String getItemName2() {
return ItemName2;
}

public void setItemName(String displayName) {
this.ItemName = displayName;
}

public void setItemName1(String displayName1) {
this.ItemName1 = displayName1;
}

public void setItemName2(String displayName2) {
this.ItemName2 = displayName2;
}

public boolean isSelected() {
return isSelected;
}

public void setSelected(boolean isSelected) {
this.isSelected = isSelected;
}

}

DBHelper.java

package com.parthiv.listactivitymain;

import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;

public class DBHelper extends SQLiteOpenHelper {
static String DATABASE_NAME = "sendlocdat";
public static final String TABLE_NAME = "sendloctab";
public static final String KEY_FNAME = "fname";

public static final String KEY_ID = "id";

public DBHelper(Context context) {
super(context, DATABASE_NAME, null, 1);

}

@Override
public void onCreate(SQLiteDatabase db) {
String CREATE_TABLE = "CREATE TABLE " + TABLE_NAME + " (" + KEY_ID
+ " INTEGER PRIMARY KEY, " + KEY_FNAME + " TEXT)";
db.execSQL(CREATE_TABLE);

}

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL("DROP TABLE IF EXISTS " + TABLE_NAME);
onCreate(db);

}

public int getProfilesCount() {
String countQuery = "SELECT  * FROM " + TABLE_NAME;
SQLiteDatabase db = this.getReadableDatabase();
Cursor cursor = db.rawQuery(countQuery, null);
int cnt = cursor.getCount();
cursor.close();
return cnt;
}


}

Screenshots:-








No comments:

Post a Comment

back to top