2015-01-11 3 views
0

Привет, ребята, я пытаюсь добавить функцию поиска в свою деятельность, которая использует listView для отображения информации о машине. Я пробовал много решений, но никто не работает для меня.Поиск ListView, который использует LayoutInflater в Android

На самом деле я добавил textView в VehicleActivity & Я хочу отфильтровать содержимое своего спискаView, когда пользователь вводит что-то в textView.

этот код VehicleActivity

public class VehicleActivity extends Activity 
{ 
     //The PlaceHolder For The View's 
    ListView listView; 
    private ListAdapter mAdapter; 


    //Static Variable For Passing The VehicleActivity Context To SessionExpired() 
    public static Context mContext; 

    //public ImageView img_arrow; 
    public int context_menu_index; 

    //Alert DialogBox 
    public AlertDialog AltDialog; 
    public boolean CDialog_value = false;  //Used when command of immoblize & De-Imoblize use fired 

    //Exception Handling 
    static PostException PstExp; 

    //Text View 
    EditText editsearch; 

    /** Called when the activity is first created. */ 
    public void onCreate(Bundle savedInstanceState) 
    { 
     try 
     { 
      Log.d("VA OnC", "Before Super"); 
      super.onCreate(savedInstanceState); 
      mContext = getBaseContext(); 
      setTitleBar();    //Setting The Title Bar 

      setContentView(R.layout.activity_vehicle);  //Passing The XML Layout 

      //Getting Infromation From Parent Activity 
      Intent intent_veh  = getIntent(); 
      User_ID     = intent_veh.getIntExtra("UID", 0);        //UserId 
      session_key    = intent_veh.getStringExtra("Key");        //Session Key 
      permissions    = new int [(intent_veh.getIntArrayExtra("Rights")).length];  //Permissions Length 
      permissions    = intent_veh.getIntArrayExtra("Rights");      //Permissions Assignment 


      //To Overwrite The Last Value Of The Variables 
      EmptyActivity = false; 
      //Initializing GetVehicleList Object 
      obj_GVL = new GetVehicleList(VehicleActivity.this, User_ID, session_key); 

      //Calling The Method That Will Fetch Information From Server 
      obj_GVL.getVehicleInfo(); 

      Log.d("VA ", "Before EA Check"); 
      if(EmptyActivity == false) 
      { 
       //Passing XML layout To ListView 
       Log.d("VA ", "Before listView = (ListView) findViewById(R.id.list_view)"); 
       listView = (ListView) findViewById(R.id.list_view); 
       Log.d("VA ", "Before listView.setAdapter(new EfficientAdapter(this))"); 

       mAdapter = new EfficientAdapter(this); 
       listView.setAdapter(mAdapter); 
       //enables filtering for the contents of the given ListView 
       listView.setTextFilterEnabled(true); 
       //listView.setAdapter(new EfficientAdapter(this)); 

       //Search Box Code Start 
       editsearch = (EditText) findViewById(R.id.search); 

       //Search Box Code End 

       Log.d("VA ", "Before listView.setOnItemClickListener()"); 
       Log.d("VA ", "Before VehicleList.Location[0] ="); 
      } 
     } 
     catch(Exception e) 
     { 
      //Some Code 
     } 
     catch(Error e2) 
     { 
      //Some Code 
     } 
    } 

    //Some code 

    } 

Это код моего адаптера, который является частью транспортного средства деятельности

//Passing Actual Data To PlaceHolder Of ListView 
    private class EfficientAdapter extends BaseAdapter 
    { 
     private LayoutInflater mInflater; 

     public EfficientAdapter(Context context) 
     { 
      //mInflater = LayoutInflater.from(context); 
     } 

     public int getCount() 
     { 
      return VehicleList.Vehicle_ID.length; 
      //return GetVehicleList.ID.length; 
     } 

     public Object getItem(int position) 
     { 
      return position; 
     } 

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

     public View getView(final int position, View convertView, ViewGroup parent) 
     { 
      ViewHolder holder; 
      try 
      { 
       if (convertView == null) 
       { 
        mInflater = (LayoutInflater) getBaseContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
        convertView = mInflater.inflate(R.layout.three_col_row, null); 

         holder = new ViewHolder(); 

         holder.text1 = (TextView) convertView.findViewById(R.id.imei); 
         holder.text2 = (TextView) convertView.findViewById(R.id.status); 
         holder.text3 = (TextView) convertView.findViewById(R.id.location); 
         holder.text4 = (TextView) convertView.findViewById(R.id.speed); 
         holder.text5 = (TextView) convertView.findViewById(R.id.date); 
         holder.img_option = (ImageView) convertView.findViewById(R.id.img_arrow); 

         convertView.setTag(holder); 

        holder.img_option.setOnClickListener(new OnClickListener() 
        { 
         @Override 
         public void onClick(View v) 
         { 
          VehicleActivity.this.registerForContextMenu(listView);           
          VehicleActivity.this.openContextMenu(listView); 


          VehicleActivity.this.context_menu_index = VehicleActivity.this.listView.getPositionForView(v); 

         } 
        }); 

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

       holder.img_option.setFocusable(true); 
       holder.img_option.setClickable(true); 
       holder.img_option.setTag(holder); 

       //Setting The Font Style 
       holder.text1.setTypeface(null, Typeface.BOLD); 
       holder.text2.setTypeface(null, Typeface.ITALIC); 

       //Passing The Actual Values To TextViews 
       holder. text1.setText("ID: "  +VehicleList.IMEI[position]); 
       holder.text2.setText("Status: " +VehicleList.Status[position]); 
       holder.text3.setText("Location: " +VehicleList.Location[position]); 
       holder.text4.setText("Speed: " +VehicleList.Speed[position]); 
       holder.text5.setText("Date: " +VehicleList.Date[position]); 

       convertView.setBackgroundColor(position % 2 == 0 ? Color.parseColor("#eaeaea") : Color.parseColor("#d3e3f3")); 
      } 
      catch(Exception e) 
      { 
       PstExp = new PostException("VA.EA.GETVEW Ln:830",                 //Block 
          (e.getMessage() == null)? "null": "Android App VA.EA.GETVEW() \n"+e.getMessage().toString(),    //Message 
         (e.getStackTrace() == null)? "null": "Android App VA.EA.GETVEW() \n"+e.getStackTrace().toString(),   //Stack Trace 
          (e.getCause() == null)? "null": "Android App VA.EA.GETVEW() \n"+e.getCause().toString()  );  //Inner Exception 
      } 
      catch(Error e2) 
      { 
       PstExp = new PostException("VA.EA.GETVEW Ln:837",                 //Block 
         (e2.getMessage() == null)? "null": "Android App VA.EA.GETVEW() \n"+e2.getMessage().toString(),    //Message 
        (e2.getStackTrace() == null)? "null": "Android App VA.EA.GETVEW() \n"+e2.getStackTrace().toString(),   //Stack Trace 
         (e2.getCause() == null)? "null": "Android App VA.EA.GETVEW() \n"+e2.getCause().toString()  );   //Inner Exception 
      } 

      return convertView; 
     } 

     public class ViewHolder 
     { 
      TextView text1; 
      TextView text2; 
      TextView text3; 
      TextView text4; 
      TextView text5; 
      ImageView img_option; 
     } 


    } 

этот код VehicleList

public class VehicleList 
{ 
public static int[] Vehicle_ID; 

public static String[] IMEI; 
public static String[] Status; 
public static String[] Location; 

public static String[] Speed; 
public static String[] Date; 

public static Double[] Latitude; 
public static Double[] Longitude; 

String error="", msg=""; 

}

ответ

0

С вашего вопроса, что я понял, вам нужно реализовать функцию поиска, когда вы вводите текст в . Поле ввода поиска. Таким образом, приведенный выше код работает отлично, я думаю (по крайней мере, сначала, когда активность загружается впервые). В вашем случае вам нужно добавить текстChangeListener для текстового поля следующим образом.

editsearch.addTextChangedListener(this); 

@Override 
public void afterTextChanged(Editable s) { 
    // TODO Auto-generated method stub 
} 
@Override 
public void beforeTextChanged(CharSequence s, int start, int count, 
     int after) { 
    // TODO Auto-generated method stub 


} 
@Override 
public void onTextChanged(CharSequence s, int start, int before, int count) { 
    // TODO Auto-generated method stub 


} 

переместить эти строки в к способу,

mAdapter = new EfficientAdapter(this); 
listView.setAdapter(mAdapter); 
listView.setTextFilterEnabled(true); 

и вызвать метод внутри

public void onTextChanged(CharSequence s, int start, int before, int count) 

Надеется, что это помогает.

+0

спасибо за помощь и теперь я запутался в реализации фильтруемого интерфейса. –

Смежные вопросы