簡體   English   中英

SearchView 過濾器不會產生預期的結果

[英]SearchView Filter doesn't produce the expected result

在我在這里解決了我的問題后,當我將文本放入搜索框中時,搜索過濾器仍然不起作用。

這是我的代碼:

 package intikom.streammobile.Customer; import android.app.ProgressDialog; import android.app.SearchManager; import android.content.Context; import android.content.Intent; import android.content.SharedPreferences; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.support.v7.widget.SearchView; import android.text.TextUtils; import android.view.KeyEvent; import android.view.Menu; import android.view.MenuInflater; import android.view.MenuItem; import android.view.View; import android.widget.AdapterView; import android.widget.ListView; import android.widget.Toast; import org.json.simple.JSONArray; import org.json.simple.JSONObject; import org.json.simple.parser.JSONParser; import org.json.simple.parser.ParseException; import java.util.ArrayList; import java.util.List; import intikom.streammobile.Index; import intikom.streammobile.R; import intikom.streammobile.Utility.BigProccess; import intikom.streammobile.Utility.RESTClient; import intikom.streammobile.Workflow.MyRequest.ListRequestItem; import intikom.streammobile.Workflow.WorkflowActivity; public class ListCustomer extends AppCompatActivity implements SearchView.OnQueryTextListener { private static final String ARG_SECTION_NUMBER = "section_number"; private static String URLService; private static String rowsPerPage; private static ListView lv; private static SharedPreferences pref; private List<ListCustomerItem> mItems; private List<ListCustomerItem> mItems2; private ListCustomerItem item; private static String customerID; public ListCustomer() { } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_list_customer); URLService = getString(R.string.URLService); final ListView lv = (ListView)findViewById(R.id.lvCustomerList); lv.setTextFilterEnabled(true); lv.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { item = new ListCustomerItem(); item = mItems.get(position); SharedPreferences pref = getApplicationContext().getSharedPreferences("MyPref", MODE_PRIVATE); SharedPreferences.Editor editor = pref.edit(); editor.putString("CustomerID", item.CustID); editor.putString("CustomerName", item.CustName); editor.commit(); Intent i = new Intent(getApplicationContext(),WorkflowActivity.class); i.putExtra("CustomerName", item.CustName); setResult(1000, i); finish(); } }); getCustomer(); getLocal(); if (mItems==null) { if(mItems2==null) { Toast.makeText(this, "Internet connection appears to be offline", Toast.LENGTH_LONG).show(); } else { lv.setAdapter(new ListCustomerAdapter(this, mItems2)); } } else { lv.setAdapter(new ListCustomerAdapter(this, mItems)); } getSupportActionBar().setDisplayHomeAsUpEnabled(true); } @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.searchbox, menu); SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE); SearchView searchView = (SearchView) menu.findItem(R.id.action_search).getActionView(); searchView.setSearchableInfo( searchManager.getSearchableInfo(getComponentName())); searchView.setSubmitButtonEnabled(true); searchView.setOnQueryTextListener(this); return true; } @Override public boolean onQueryTextSubmit(String query) { return false; } @Override public boolean onQueryTextChange(String newText) { if (TextUtils.isEmpty(newText)) { lv.clearTextFilter(); } else { lv.setFilterText(newText.toString()); } return true; } }

我的適配器

 package intikom.streammobile.Customer; import android.content.Context; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ArrayAdapter; import android.widget.TextView; import java.util.List; import intikom.streammobile.R; /** * Created by agilang on 20/01/2016. */ public class ListCustomerAdapter extends ArrayAdapter<ListCustomerItem> { public ListCustomerAdapter(Context context, List<ListCustomerItem> items) { super(context, R.layout.style_fragment_list_customer, items); } @Override public View getView(int position, View convertView, ViewGroup parent) { ViewHolder viewHolder; if(convertView == null) { // inflate the GridView item layout LayoutInflater inflater = LayoutInflater.from(getContext()); convertView = inflater.inflate(R.layout.style_fragment_list_customer, parent, false); // initialize the view holder viewHolder = new ViewHolder(); viewHolder.tvCustName = (TextView) convertView.findViewById(R.id.tvCustName); viewHolder.tvCustLocation = (TextView) convertView.findViewById(R.id.tvCustLocation); convertView.setTag(viewHolder); } else { // recycle the already inflated view viewHolder = (ViewHolder) convertView.getTag(); } // update the item view ListCustomerItem item = getItem(position); viewHolder.tvCustName.setText(item.CustName); viewHolder.tvCustLocation.setText(item.CustLocation); return convertView; } /** * The view holder design pattern prevents using findViewById() * repeatedly in the getView() method of the adapter. * * @see http://developer.android.com/training/improving-layouts/smooth-scrolling.html#ViewHolder */ private static class ViewHolder { TextView tvCustName; TextView tvCustLocation; } }

和菜單

 <?xml version="1.0" encoding="utf-8"?> <menu xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto"> <item android:id="@+id/action_search" android:icon="@android:drawable/ic_menu_search" app:showAsAction="collapseActionView|always" android:title="Search" app:actionViewClass="android.support.v7.widget.SearchView"/> </menu>

這是在輸入文本之前在此處輸入圖像描述

過濾后

在此處輸入圖片說明

任何幫助表示贊賞。

我認為你的代碼://某些地方在你的代碼中(比如onCreate )像這樣定義你的Adapter

ListCustomerAdapter adapter = new ListCustomerAdapter(this, mItems2);
...

然后將onQueryTextChange方法更改為如下所示:

public boolean onQueryTextChange(String newText) {
  if (TextUtils.isEmpty(newText))
    {
      adapter.getFilter().filter("");
      lv.clearTextFilter();
    }
   else
    {
      lv.setFilterText(newText);
      adapter.getFilter().filter(newText);
    }
   return true;
 }

您可能還想在此處查看有關創建由AdaptergetFilter()方法返回的自定義Filter建議 我希望這會有所幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM