Search code examples
androidandroid-volleyandroid-arrayadapter

Search in Listview using Array adapter


I want to apply search functionality in my listview which is fetch from server using volley library what i want is when i enter the date in edittext it shows only that row in listview and eliminates other ones (say ordinary search functionality). I have seen my many on google but it shows this functionality using base adapter but in my case i have used array adapter. How can i apply this kindly help me

Emp_Statistics

import android.app.Activity;
import android.app.ProgressDialog;
import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.text.Editable;
import android.text.TextWatcher;
import android.view.View;
import android.widget.AdapterView;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;
import com.android.volley.AuthFailureError;
import com.android.volley.Request;
import com.android.volley.RequestQueue;
import com.android.volley.Response;
import com.android.volley.VolleyError;
import com.android.volley.toolbox.StringRequest;
import com.android.volley.toolbox.Volley;
import org.w3c.dom.Text;
import java.util.HashMap;
import java.util.Map;

public class Emp_Statistics extends Activity
{
public static final String JSON_URL = "*****";
private ProgressDialog pDialog;
private ListView listView;
String emp_id,email_rec;
CustomListStatistics cl;
String empr_id,empr_company,task,task_desc,email_receive;
TextView tv_empty;
EditText inputSearch;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_emp__statistics);

    inputSearch=(EditText)findViewById(R.id.inputSearch);

    tv_empty=(TextView)findViewById(R.id.empty);
    listView = (ListView)findViewById(R.id.list_statistics);

    emp_id=getIntent().getExtras().getString("EMP_ID");
    empr_id=getIntent().getExtras().getString("EMPR_ID");
    empr_company=getIntent().getExtras().getString("EMPR_COMPANY");
    email_receive=getIntent().getExtras().getString("EMP_EMAIL");

    sendRequest();
    pDialog = new ProgressDialog(Emp_Statistics.this);
    // Showing progress dialog before making http request
    pDialog.setMessage("Loading...");
    pDialog.show();
    // Listview listner
    inputSearch.addTextChangedListener(new TextWatcher() {

        @Override
        public void onTextChanged(CharSequence cs, int arg1, int arg2, int  arg3) {
            // When user changed the Text
            Emp_Statistics.this.cl.getFilter().filter(cs);
        }

        @Override
        public void beforeTextChanged(CharSequence arg0, int arg1, int arg2,
                                      int arg3) {
            // TODO Auto-generated method stub

        }

        @Override
        public void afterTextChanged(Editable arg0) {
            // TODO Auto-generated method stub
        }
    });

    listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> adapterView, View view, int  i, long l)
        {
            TextView tv_date_in=(TextView)view.findViewById(R.id.date_in);
            TextView tv_date_out=(TextView)view.findViewById(R.id.date_out);
            TextView tv_empr_id=(TextView)view.findViewById(R.id.empr_name);

            TextView tv_time_in=(TextView)view.findViewById(R.id.time_in);
            TextView tv_time_out=(TextView)view.findViewById(R.id.time_out);
            TextView tv_task=(TextView)view.findViewById(R.id.task_name);
            TextView tv_task_desc= (TextView)view.findViewById(R.id.task_desc);

            //String  info=""+tv_date_in.getText().toString()+""+tv_date_out.getText().toString()+""+tv_empr_id.getText().toString()+""+tv_time_in.getText().toString()+""+tv_time_out.getText().toString()+""+tv_task.getText().toString()+""+tv_task_desc.getText().toString();
            Intent in=new  Intent(Emp_Statistics.this,Emp_Stat_Details.class);

            in.putExtra("DATE_IN",tv_date_in.getText().toString());
            in.putExtra("DATE_OUT",tv_date_out.getText().toString());
            in.putExtra("TIME_IN",tv_time_in.getText().toString());
            in.putExtra("TIME_OUT",tv_time_out.getText().toString());
            in.putExtra("TASK_NAME",tv_task.getText().toString());
            in.putExtra("TASK_DESC",tv_task_desc.getText().toString());
            startActivity(in);

            // Toast.makeText(Emp_Statistics.this, ""+info,  Toast.LENGTH_SHORT).show();

        }
    });

}
private void sendRequest()
{

    StringRequest stringRequest = new  StringRequest(Request.Method.POST,JSON_URL,
            new Response.Listener<String>() {
                @Override
                public void onResponse(String response) {
                    hidePDialog();
                    showJSON(response);
                }
            },
            new Response.ErrorListener()
            {
                @Override
                public void onErrorResponse(VolleyError error) {
                     Toast.makeText(Emp_Statistics.this,error.getMessage(),Toast.LENGTH_LONG).show();
                    hidePDialog();
                }
            })
    {
        @Override
        protected Map<String, String> getParams() throws AuthFailureError
        {
            Map<String,String> map = new HashMap<String,String>();
            map.put("empr_id",empr_id);

            return map;
        }
    };

    RequestQueue requestQueue = Volley.newRequestQueue(Emp_Statistics.this);
    requestQueue.add(stringRequest);
}

private void showJSON(String json)
{
    ParseJSONStatistics pj = new ParseJSONStatistics(json);
    pj.parseJSONA();
    cl = new  CustomListStatistics(Emp_Statistics.this,ParseJSONStatistics.ids,ParseJSONStatis tics.Empr_name,ParseJSONStatistics.DateIn,ParseJSONStatistics.DateOut,ParseJSONS tatistics.TimeIn,ParseJSONStatistics.TimeOut,ParseJSONStatistics.TaskName,ParseJ SONStatistics.TaskDesc);
    //listView.setEmptyView();
    if(cl.getCount()!=0)
    {
        listView.setAdapter(cl);
        listView.setTextFilterEnabled(true);

    }
    else
    {
        //Toast.makeText(Emp_My_Companies.this, "No Items  Available",Toast.LENGTH_SHORT).show();
        listView.setVisibility(View.INVISIBLE);
        tv_empty.setVisibility(View.VISIBLE);
    }


}
@Override
public void onDestroy()
{
    super.onDestroy();
    hidePDialog();
}
 private void hidePDialog() {
    if (pDialog != null) {
        pDialog.dismiss();
        pDialog = null;
    }
   }

   }

CustomListStatistics:

import android.app.Activity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import com.example.wajid.virtualemployee.R;
import android.widget.ArrayAdapter;
import android.widget.TextView;

import java.util.Locale;



public class CustomListStatistics extends ArrayAdapter<String> {
private String[] ids;
private String[] Empr_Name;
private String[] DateIn;
private String[] DateOut;
private String[] TimeIn;
private String[] TimeOut;
private String[] TaskName;
private String[] TaskDesc;
private Activity context;

public CustomListStatistics(Activity context, String[] ids,String[]  Empr_Name,String[] DateIn,String[] DateOut,String[] TimeIn,String[]  TimeOut,String[] TaskName,String[] TaskDesc) {
    super(context, R.layout.emp_statistics,ids);
    this.context = context;
    this.ids = ids;
    this.DateIn = DateIn;
    this.DateOut = DateOut;
    this.TimeIn = TimeIn;
    this.TimeOut = TimeOut;
    this.TaskName = TaskName;
    this.TaskDesc = TaskDesc;
    this.Empr_Name = Empr_Name;

  }

   @Override
   public View getView(int position, View convertView, ViewGroup parent) {
    LayoutInflater inflater = context.getLayoutInflater();
    View listViewItem = inflater.inflate(R.layout.emp_statistics, null,  true);

    TextView textid = (TextView) listViewItem.findViewById(R.id.id);
    TextView txtEmprName = (TextView) listViewItem.findViewById(R.id.empr_name);
    TextView txtDateIn=(TextView)listViewItem.findViewById(R.id.date_in);
    TextView txtDateOut = (TextView)  listViewItem.findViewById(R.id.date_out);
    TextView txtTimeIn = (TextView) listViewItem.findViewById(R.id.time_in);
    TextView txtTimeOut=(TextView)listViewItem.findViewById(R.id.time_out);
    TextView txtTask = (TextView) listViewItem.findViewById(R.id.task_name);
    TextView txtTaskDesc = (TextView)  listViewItem.findViewById(R.id.task_desc);

    textid.setText(ids[position]);
    txtEmprName.setText(Empr_Name[position]);
    txtDateIn.setText(DateIn[position]);
    txtDateOut.setText(DateOut[position]);
    txtTimeIn.setText(TimeIn[position]);
    txtTimeOut.setText(TimeOut[position]);
    txtTask.setText(TaskName[position]);
    txtTaskDesc.setText(TaskDesc[position]);

    return listViewItem;
}
}

ParseJSONStatistics:

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


public class ParseJSONStatistics {

public static String[] ids;
public static String[] Empr_name;
public static String[] DateIn;
public static String[] DateOut;
public static String[] TimeIn;
public static String[] TimeOut;
public static String[] TaskName;
public static String[] TaskDesc;


public static final String JSON_ARRAY = "result";

public static final String KEY_ID = "id";
public static final String KEY_EMPR_NAME = "empr_id";
public static final String KEY_DATEIN = "date_in";
public static final String KEY_DATEOUT = "date_out";
public static final String KEY_TIMEIN = "time_in";
public static final String KEY_TIMEOUT = "time_out";
public static final String KEY_TASK = "task";
public static final String KEY_TASKDESC = "task_desc";


private JSONArray users = null;

private String json;

public ParseJSONStatistics(String json){
    this.json = json;
  }

  public void parseJSONA(){
    JSONObject jsonObject=null;
    try {
        jsonObject = new JSONObject(json);
        users = jsonObject.getJSONArray(JSON_ARRAY);


        ids = new String[users.length()];
        Empr_name = new String[users.length()];
        DateIn = new String[users.length()];
        DateOut = new String[users.length()];
        TimeIn = new String[users.length()];
        TimeOut = new String[users.length()];
        TaskName = new String[users.length()];
        TaskDesc = new String[users.length()];


        for(int i=0;i<users.length();i++){
            JSONObject jo = users.getJSONObject(i);

            ids[i] = jo.getString(KEY_ID);
            Empr_name[i] = jo.getString(KEY_EMPR_NAME);
            DateIn[i] = jo.getString(KEY_DATEIN);
            DateOut[i] = jo.getString(KEY_DATEOUT);
            TimeIn[i] = jo.getString(KEY_TIMEIN);
            TimeOut[i] = jo.getString(KEY_TIMEOUT);
            TaskName[i] = jo.getString(KEY_TASK);
            TaskDesc[i] = jo.getString(KEY_TASKDESC);

        }
    } catch (JSONException e) {
        e.printStackTrace();
    }
 }
}

Solution

  • You have to extends your adapter with baseadapterto implement filterable options.