listview - 将筛选应用于ListView的单个项

  显示原文与译文双语对照的内容
0 0

我将在ListView中实现一个搜索栏。 我使用 SimpleAdapter,代码如下:

adapter = new SimpleAdapter(this, menuItems,
 R.layout.list_item,
 new String[] { KEY_NAME, KEY_DESC, KEY_ADDRESS, KEY_LAT, KEY_LNG, KEY_IDLOC, KEY_DATE, KEY_IDPR}, new int[] {
 R.id.name, R.id.desciption, R.id.cost, R.id.latitude, R.id.longitude, R.id.id, R.id.date, R.id.pr});

我只将搜索栏应用于 KEY_ADDRESS 项目。 我该怎么做?

编辑:我添加 Activity

 ListAdapter adapter;
@Override
public void onCreate(Bundle savedInstanceState) {
 super.onCreate(savedInstanceState);
 setContentView(R.layout.tab3main);
 ParserTask pt=new ParserTask();
 pt.execute();
 ArrayList<HashMap<String, String>> menuItems;
 try {
 menuItems = pt.get();
 adapter = new SimpleAdapter(this, menuItems,
 R.layout.list_item,
 new String[] { KEY_NAME, KEY_DESC, KEY_ADDRESS, KEY_LAT, KEY_LNG, KEY_IDLOC, KEY_DATE, KEY_IDPR}, new int[] {
 R.id.name, R.id.desciption, R.id.cost, R.id.latitude, R.id.longitude, R.id.id, R.id.date, R.id.pr});
 } catch (InterruptedException e) {
//TODO Auto-generated catch block
 e.printStackTrace();
 } catch (ExecutionException e) {
//TODO Auto-generated catch block
 e.printStackTrace();
 }

我尝试过:

final EditText myFilter = (EditText) findViewById(R.id.myFilter);
 myFilter.addTextChangedListener(new TextWatcher() {
 @Override
 public void afterTextChanged(Editable arg0) {
//TODO Auto-generated method stub
 String text = myFilter.getText().toString().toLowerCase(Locale.getDefault());
 ((SimpleAdapter) adapter).getFilter().filter(text);
 }
 @Override
 public void beforeTextChanged(CharSequence arg0, int arg1, int arg2,
 int arg3) {
//TODO Auto-generated method stub
 }
 @Override
 public void onTextChanged(CharSequence s, int start,
 int before, int count) {
//TODO Auto-generated method stub
 }

但它返回一个 NUllPointerException 。 下面的aecq:

 07-18 18:40:44.536: E/AndroidRuntime(274): FATAL EXCEPTION: main

07-18: 40:: 44: e/AndroidRuntime ( 274 ): java.lang.NullPointerException 07 -18 18: 40:: 在 android.widget.SimpleAdapter.getCount(SimpleAdapter.java:93):: 40: 44::: 0: 在 android.widget.AdapterView.checkFocus(AdapterView.java:689):: 40: 44::: 0: 例如:在 AndroidRuntime 。adapterview$adapterdatasetobserver 。onInvalidated ( adapterview 。java: 813 ) 07 -18 18: 40: 44: 在 android.database.DataSetObservable.notifyInvalidated(DataSetObservable.java:43):: 40: 44::: 0: 在 android.widget.BaseAdapter.notifyDataSetInvalidated(BaseAdapter.java:54):: 40: 44::: 0: 例如:在 AndroidRuntime 。simpleadapter$simplefilter 。publishResults ( simpleadapter 。java: 383 ) 07 -18 18: 40: 44: 例如:在 AndroidRuntime 。filter$resultshandler 。handleMessage ( 筛选器:282 ) 07 -18 18: 40: 44: 在 AndroidRuntime/( 274 ): 在 android.os. Handler.dispatchMessage(Handler.java:99) 07 -18 18: 40: 44: 在 AndroidRuntime/( 274 ): 在 android.os. Looper.loop(Looper.java:123) 07 -18 18: 40: 44: 在 AndroidRuntime/( 274 ): 在 android.app. ActivityThread.main(ActivityThread.java:4627) 07 -18 18: 40: 44: 在 AndroidRuntime/( 274 ): 在 java.lang. reflect.Method.invokeNative(Native Method) 07 -18 18: 40: 44: 在 AndroidRuntime/( 274 ): 在 java.lang. reflect.Method.invoke(Method.java:521) 07 -18 18: 40: 44: e: 在 com 。AndroidRuntime 。内部。os 。zygoteinit$methodandargscaller 。运行( ZygoteInit 。java: 868 ) 07 -18 18: 40: 44:: 在 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626):: 40: 44::: 0: e/AndroidRuntime ( 274 ): dalvik.system.NativeStart.main(Native Method )

时间:原作者:3个回答

0 0

你需要为它编写自定义适配器。

检查这里链接- http://www.androidhive.info/2012/09/android-adding-search-functionality-to-listview/

原作者:
...