SearchView过滤器未产生预期结果

问题描述 投票:1回答:1

here中解决了我的问题后,当我在搜索框中输入文字时,搜索过滤器仍然不起作用。

这是我的代码:

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>

请在此处输入文字enter image description here

过滤后

enter image description here

感谢您的任何帮助。

java android searchview
1个回答
1
投票

我认为您的代码://在代码中的某些位置(例如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;
 }

您可能还想签出suggestion here about creating a custom Filter to be returned by the getFilter() method of your Adapter。希望对您有所帮助。

© www.soinside.com 2019 - 2024. All rights reserved.