2013-09-26 89 views
0

我有一個列表視圖,每行中的項目和子項目。我有一個EditText字段,我想用它來過濾鍵入文本的列表。我希望能夠搜索項目和子項目。有人能夠指出我如何做到這一點的正確方向嗎?過濾Android列表查看

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

import android.content.Intent; 
import android.os.Bundle; 
import android.text.Editable; 
import android.text.TextWatcher; 
import android.view.View; 
import android.widget.AdapterView; 
import android.widget.AdapterView.OnItemClickListener; 
import android.widget.ArrayAdapter; 
import android.widget.EditText; 
import android.widget.ListView; 
import android.widget.SimpleAdapter; 
import android.widget.TextView; 

import com.google.android.gms.maps.model.Marker; 

public class FarmMarketList extends RSFM 
{ 
    ListView marketList; 
    ArrayList<String> titles = new ArrayList<String>(); 
    ArrayList<String> addresses = new ArrayList<String>(); 
    ArrayAdapter<String> adapter; 
    EditText listSearch; 

    public void onCreate(Bundle savedInstanceState) 
    { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.farm_market_list); 
     marketList = (ListView) findViewById(R.id.listFarmMarkets); 
     listSearch = (EditText) findViewById(R.id.listSearch); 

     for(Marker m : list) 
     { 
      titles.add(m.getTitle()); 
      addresses.add(m.getSnippet()); 
     } 

     List<Map<String, String>> data = new ArrayList<Map<String, String>>(); 

     for(int i = 0; i < titles.size(); i++) 
     { 
      Map<String, String> datum = new HashMap<String, String>(2); 
      datum.put("title", titles.get(i)); 
      datum.put("subtitle", addresses.get(i)); 
      data.add(datum); 
     } 

     SimpleAdapter simpleAdapter = new SimpleAdapter(FarmMarketList.this, data, android.R.layout.simple_list_item_2, new String[] {"title", "subtitle"}, new int[] {android.R.id.text1, android.R.id.text2}); 
     marketList.setAdapter(simpleAdapter); 

     // Row Selection 
     marketList.setOnItemClickListener(new OnItemClickListener() 
     { 
      @Override 
      public void onItemClick(AdapterView<?> parent, View v, int position, long id) 
      { 
       TextView text1 = (TextView) v.findViewById(android.R.id.text1); 
       TextView text2 = (TextView) v.findViewById(android.R.id.text2); 

       Intent i = new Intent(FarmMarketList.this, FarmMarketDetails.class); 
       i.putExtra("selectedTitle", text1.getText()); 
       i.putExtra("selectedAddress", text2.getText()); 
       startActivity(i); 
      } 
     }); 
    } 
} 

編輯:我添加了此代碼,但它導致應用程序崩潰時,我開始在EditText字段中鍵入。

listSearch.addTextChangedListener(new TextWatcher() 
     { 
      @Override 
      public void onTextChanged(CharSequence cs, int arg1, int arg2, int arg3) 
      { 
       FarmMarketList.this.adapter.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 
      } 
     }); 
+0

我建議[此鏈接](HTTP工作://開發商.android.com/guide/topics/ui/controls/text.html#AutoComplete)和[這個鏈接](http://developer.android.com/reference/android/widget/AutoCompleteTextView.html) – MiStr

+0

試試這個:http ://stackoverflow.com/questions/1737009/how-to-make-a-nice-looki ng-listview-filter-on-android –

+0

使用此查找解決方案http://stackoverflow.com/questions/17720481/how-could-i-filter-the-listview-using-baseadapter/20743661#20743661 –

回答

1

我把它加入

marketList.setTextFilterEnabled(true); 

和轉產的onTextChange()方法來

FarmMarketList.this.simpleAdapter.getFilter().filter(cs); 
+0

嘿,你可以嗎?粘貼整個代碼,它可以幫助我很多。 – sjpatel