Hi,

I am having a custom listview [list with image and 2 textbox] and i
want to apply filter for it.

desc of cust listview:

1:Image i.e flag of country

2:1st textbox (name of country)

3:2nd textbox (name of continent)

so when i write " i " in a textbox [different from the ones mentioned
above] i want the list to get filtered according to country name.

My code details:

1:_________________________row.xml [each row of
list]__________________________

<?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="?android:attr/listPreferredItemHeight"
   android:padding="6dip">
   <ImageView
       android:id="@+id/icon"
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:layout_marginRight="6dip"/>
<!--        android:src="@drawable/icon" />-->
   <LinearLayout
       android:orientation="vertical"
       android:layout_width="0dip"
       android:layout_weight="1"
       android:layout_height="35dip">
       <TextView
           android:id="@+id/toptext"
           android:layout_width="fill_parent"
           android:layout_height="0dip"
           android:layout_weight="1"
           android:gravity="center_vertical"
       />
       <TextView
           android:layout_width="fill_parent"
           android:layout_height="0dip"
           android:layout_weight="1"
           android:id="@+id/bottomtext"
           android:singleLine="true"
           android:ellipsize="marquee"
       />
   </LinearLayout>
</LinearLayout>

2:__________________main.xml_____________________

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/
android"
  android:orientation="vertical"
  android:layout_width="fill_parent"
  android:layout_height="fill_parent"
  >
  <EditText android:id="@+id/search_box"
       android:layout_width="fill_parent"
       android:layout_height="wrap_content"
       android:hint="type to filter"
       android:inputType="text"
       android:maxLines="1"/>
<ListView
   android:id="@+id/android:list"
   android:layout_width="fill_parent"
   android:layout_height="fill_parent"
   />
<TextView
   android:id="@+id/android:empty"
   android:layout_width="fill_parent"
   android:layout_height="fill_parent"
   android:text="@string/main_no_items"/>
</LinearLayout>

3:_______________________softwarepassionview.java___________________________
package com.softberries.lve;

import java.util.ArrayList;

//import com.TryFilter.R;

import android.app.ListActivity;
import android.app.ProgressDialog;
import android.content.Context;
import android.os.Bundle;
import android.text.Editable;
import android.text.TextWatcher;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.View.OnClickListener;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.EditText;
import android.widget.Filter;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.Filter.FilterListener;


public class SoftwarePassionView extends ListActivity{

   private ProgressDialog m_ProgressDialog = null;
   private ArrayList<Order> m_orders = null;
   private OrderAdapter m_adapter;
   private Runnable viewOrders;
   private EditText filterText = null;
   ArrayAdapter<String> adapter = null;
   ArrayList<String> data = new ArrayList<String>();


   LayoutInflater vi;
   View v;
   TextView tt;
   TextView bt;
   ImageView iv;
   ListView lv;

   @Override
   public void onCreate(Bundle savedInstanceState) {
       super.onCreate(savedInstanceState);
       setContentView(R.layout.main);

       //-------
       data.add("India");
       data.add("US");
       data.add("Pak");
       filterText = (EditText) findViewById(R.id.search_box);
       filterText.addTextChangedListener(filterTextWatcher);
       adapter = new ArrayAdapter<String>(this,
               R.id.toptext,
               data);
       //-------


       m_orders = new ArrayList<Order>();
       this.m_adapter = new OrderAdapter(this, R.layout.row,
m_orders);
       setListAdapter(this.m_adapter);


       viewOrders = new Runnable(){
           @Override
           public void run() {
               getOrders();
           }
       };
       Thread thread =  new Thread(null, viewOrders,
"MagentoBackground");
       thread.start();
       m_ProgressDialog =
ProgressDialog.show(SoftwarePassionView.this,
             "Please wait...", "Retrieving data ...", true);

       //------------
       lv = (ListView)findViewById(android.R.id.list);
       lv.setOnItemClickListener(new OnItemClickListener() {
                       @Override
                       public void onItemClick(AdapterView<?> arg0, View
arg1, int arg2,
                                       long arg3) {
                               // TODO Auto-generated method stub
                             Toast.makeText(getApplicationContext(),
((TextView)arg1.findViewById(R.id.toptext)).getText() ,
                                         Toast.LENGTH_SHORT).show();

                       }
               });

   }
   private TextWatcher filterTextWatcher = new TextWatcher() {

       public void afterTextChanged(Editable s) {
                //adapter.getFilter().filter(s);
       }

       public void beforeTextChanged(CharSequence s, int start, int
count,
               int after) {
       }

       public void onTextChanged(CharSequence s, int start, int
before,
               int count) {
               adapter.getFilter().filter(s);
               //m_adapter.getFilter().filter(s,(FilterListener)tt);
       }

   };
   private Runnable returnRes = new Runnable() {

       @Override
       public void run() {
           if(m_orders != null && m_orders.size() > 0){
               m_adapter.notifyDataSetChanged();
               for(int i=0;i<m_orders.size();i++)
               m_adapter.add(m_orders.get(i));
           }
           m_ProgressDialog.dismiss();
           m_adapter.notifyDataSetChanged();
       }
   };
   private void getOrders(){
         try{
             m_orders = new ArrayList<Order>();
             Order o1 = new Order();
             o1.setOrderName("India");
             o1.setOrderStatus("Asia");
             o1.setFlagName("in_flag");

             Order o2 = new Order();
             o2.setOrderName("US");
             o2.setOrderStatus("North America");
             o2.setFlagName("us_flag");

             Order o3 = new Order();
             o3.setOrderName("Pak");
             o3.setOrderStatus("Asia");
             o3.setFlagName("pk_flag");
             m_orders.add(o1);
             m_orders.add(o2);
             m_orders.add(o3);
             Thread.sleep(500);
             Log.i("ARRAY", ""+ m_orders.size());
           } catch (Exception e) {
             Log.e("BACKGROUND_PROC", e.getMessage());
           }
           runOnUiThread(returnRes);
       }
   private class OrderAdapter extends ArrayAdapter<Order> {

       private ArrayList<Order> items;

       public OrderAdapter(Context context, int textViewResourceId,
ArrayList<Order> items) {
               super(context, textViewResourceId, items);
               this.items = items;
       }
       @Override
       public View getView(int position, View convertView, ViewGroup
parent) {
               v = convertView;
               if (v == null) {
                   vi =
(LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
                   v = vi.inflate(R.layout.row, null);
               }
               Order o = items.get(position);
               if (o != null) {
                       tt = (TextView) v.findViewById(R.id.toptext);
                       bt = (TextView)
v.findViewById(R.id.bottomtext);
                       iv = (ImageView)v.findViewById(R.id.icon);
                       if (tt != null) {

tt.setText(o.getOrderName());                            }
                       if(bt != null){
                             bt.setText(o.getOrderStatus());
                       }
                       int resId =
getResources().getIdentifier(o.getFlagName(), "drawable",
"com.softberries.lve");
                       iv.setBackgroundResource(resId);

               }
               return v;
       }
}
}

-- 
You received this message because you are subscribed to the Google
Groups "Android Developers" group.
To post to this group, send email to android-developers@googlegroups.com
To unsubscribe from this group, send email to
android-developers+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/android-developers?hl=en

Reply via email to