我需要getFilter()从类中重写一个方法,ArrayAdapter 然后在github中找到了源代码
//package name
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import android.content.Context;
import android.util.Log;
import android.widget.ArrayAdapter;
import android.widget.Filter;
import android.widget.Filterable;
public class CustomAdapter<T> extends ArrayAdapter<T> implements Filterable{
private ArrayList<T> mOriginalValues;
private List<T> mObjects;
private CustomFilter mFilter;
private final Object mLock = new Object();
public CustomAdapter(Context context, int textViewResourceId, T[] objects) {
super(context, textViewResourceId, objects);
mObjects = Arrays.asList(objects);
// TODO Auto-generated constructor stub
}
@Override
public Filter getFilter() {
// TODO Auto-generated method stub
if (mFilter …Run Code Online (Sandbox Code Playgroud) 我想设置自定义ArrayAdapter为我AutoCompleteTextView这样的
public class AutoCompleteContactArrayAdapter extends
ArrayAdapter<Map<String, String>> implements Filterable {
private Context mContext;
private List<Map<String, String>> mContactList;
public AutoCompleteContactArrayAdapter(Context context,
List<Map<String, String>> objects) {
super(context, R.layout.auto_contact_list, objects);
mContext = context;
mContactList = objects;
// TODO Auto-generated constructor stub
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
LayoutInflater inflater = (LayoutInflater) mContext
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View rowView = inflater.inflate(R.layout.auto_contact_list, parent,
false);
TextView nameView = (TextView) rowView.findViewById(R.id.ccontName);
TextView phoneView = (TextView) rowView.findViewById(R.id.ccontNo);
TextView typeView = (TextView) rowView.findViewById(R.id.ccontType); …Run Code Online (Sandbox Code Playgroud) 我希望有一个人可以帮助我.我一直在关注本教程Android搜索过滤器ListView图像和文本教程, 并取得了成功.我正在尝试在我自己的活动中实现它并从服务器获取数据.
当我在搜索字段内输入时,网格视图变为空.它与定制适配器上的List一样变为null.
我的活动课
package com.danz.tensai.catalog;
import android.support.v7.app.ActionBarActivity;
import android.os.Bundle;
import android.support.v4.widget.SwipeRefreshLayout;
import android.text.Editable;
import android.text.TextWatcher;
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.EditText;
import android.widget.GridView;
import android.widget.ProgressBar;
import android.widget.Toast;
import com.android.volley.Response;
import com.android.volley.VolleyError;
import com.android.volley.toolbox.JsonArrayRequest;
import com.danz.tensai.catalog.app.MyApplication;
import com.danz.tensai.catalog.helper.Product;
import com.danz.tensai.catalog.helper.SwipeListAdapter;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import java.util.ArrayList;
import java.util.List;
import java.util.Locale;
public class MainActivity extends ActionBarActivity {
private String TAG = MainActivity.class.getSimpleName();
private String URL_TOP_250 = "http://danztensai.hostoi.com/imdb_top_250.php?offset=";
private SwipeRefreshLayout swipeRefreshLayout;
//private ListView listView;
private …Run Code Online (Sandbox Code Playgroud) 为了从他的列表视图中查找关键项目,我没有在适配器中使用过滤器,但是现在按照此链接添加了过滤器,但在这一行中String playerName=songsList.get(i).get("title").toString();我收到了错误
The method get(String) is undefined for the type String
Run Code Online (Sandbox Code Playgroud)
并且在searchResults.add(songsList.get(i));作为
The method add(HashMap<String,String>) in the type ArrayList<HashMap<String,String>> is not applicable for the arguments (String)
Run Code Online (Sandbox Code Playgroud)
这是我的全部代码
public class Home extends ListActivity {
//how many to load on reaching the bottom
int itemsPerPage = 15;
boolean loadingMore = false;
//For test data :-)
Calendar d = Calendar.getInstance();
ArrayList<String> songsList;
ListView list;
LazyAdapter adapter;
JSONArray posts;
//ArrayList thats going to hold the search results
ArrayList<HashMap<String, …Run Code Online (Sandbox Code Playgroud) 在我的应用程序中,我创建了一个自定义列表视图,我想实现一个过滤器,以便可以根据EditText中输入的文本过滤列表.我使用BaseAdapter作为一个单独的类,我在我的主要活动中调用该类.我还在我的main活动中实现了addTextChangedListener(),我还在BaseAdapter类中实现了getFilter().但我不知道如何使用getFilter()并可以相应地过滤我的列表.在列表中,我将添加JSON URL中的值.请帮助我告诉我如何使用getFilter()来过滤我的列表.
Activity类的代码:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
lv = (ListView)findViewById(R.id.listView1);
et1 = (EditText)findViewById(R.id.editText1);
inflator = getLayoutInflater();
et1.addTextChangedListener(this);
JsonParser jParser = new JsonParser();
JSONObject json = jParser.getJSONfromUrl(url);
try
{
JSONArray explore = json.getJSONArray("explore");
for(int i=0; i<explore.length(); i++)
{
JSONObject exp = explore.getJSONObject(i);
list.add(exp.getString("username"));
}
}
catch(JSONException e)
{
e.printStackTrace();
}
srchadptr = new SearchAdapter(this, inflator, list);
lv.setAdapter(srchadptr);
}
public void afterTextChanged(Editable s) {
// TODO Auto-generated method stub
srchadptr.getFilter().filter(s);
}
public void beforeTextChanged(CharSequence s, int start, int …Run Code Online (Sandbox Code Playgroud) 我试图在基础适配器上实现一个getFilter()来过滤掉List上的搜索结果.有没有关于如何实现getFilter()的示例?
MainActivity.java
final AppInfoAdapter adapter = new AppInfoAdapter(this, Utilities.getSystemFilteredApplication(this), getPackageManager());
public void onTextChanged(CharSequence s, int start, int before,
int count) {
adapter.getFilter().filter(s); //Filter from my adapter
adapter.notifyDataSetChanged(); //Update my view
}
Run Code Online (Sandbox Code Playgroud)
AppInfoAdapter.java
package com.example.permission;
import java.util.List;
import android.content.Context;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageManager;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.BaseAdapter;
import android.widget.Filter;
import android.widget.Filterable;
import android.widget.ImageView;
import android.widget.TextView;
public class AppInfoAdapter extends BaseAdapter implements Filterable{
private Context mContext;
private List mListAppInfo;
PackageManager mPackManager;
public AppInfoAdapter(Context c, List list, …Run Code Online (Sandbox Code Playgroud) 我正在尝试向Android应用程序中的列表视图添加过滤。它无法正常工作,因为在搜索框中写入3-4个字母后出现以下异常。
07-02 12:14:48.348: E/AndroidRuntime(22028): FATAL EXCEPTION: main
07-02 12:14:48.348: E/AndroidRuntime(22028): java.lang.IndexOutOfBoundsException: Invalid index 1, size is 1
07-02 12:14:48.348: E/AndroidRuntime(22028): at java.util.ArrayList.throwIndexOutOfBoundsException(ArrayList.java:251)
07-02 12:14:48.348: E/AndroidRuntime(22028): at java.util.ArrayList.get(ArrayList.java:304)
07-02 12:14:48.348: E/AndroidRuntime(22028): at android.widget.ArrayAdapter.getItem(ArrayAdapter.java:337)
07-02 12:14:48.348: E/AndroidRuntime(22028): at com.sphinx.indianrailways.adapters.CityAdapter.getView(CityAdapter.java:57)
07-02 12:14:48.348: E/AndroidRuntime(22028): at android.widget.AbsListView.obtainView(AbsListView.java:2143)
07-02 12:14:48.348: E/AndroidRuntime(22028): at android.widget.ListView.makeAndAddView(ListView.java:1831)
07-02 12:14:48.348: E/AndroidRuntime(22028): at android.widget.ListView.fillDown(ListView.java:674)
07-02 12:14:48.348: E/AndroidRuntime(22028): at android.widget.ListView.fillSpecific(ListView.java:1332)
07-02 12:14:48.348: E/AndroidRuntime(22028): at android.widget.ListView.layoutChildren(ListView.java:1630)
07-02 12:14:48.348: E/AndroidRuntime(22028): at android.widget.AbsListView.onLayout(AbsListView.java:1994)
07-02 12:14:48.348: E/AndroidRuntime(22028): at android.view.View.layout(View.java:14008)
07-02 12:14:48.348: E/AndroidRuntime(22028): at android.view.ViewGroup.layout(ViewGroup.java:4373)
07-02 12:14:48.348: E/AndroidRuntime(22028): …Run Code Online (Sandbox Code Playgroud)