Java android:使用自定义适配器在ListView中添加SearchView
我正在创建一个包含3个选项卡片段的应用程序。这是片段之一,数据显示在列表视图中。在列表视图中添加搜索筛选器时,我遇到了麻烦 我已经在这个片段和列表中添加了搜索视图,所有内容都正常工作,没有任何错误,但是,当在搜索视图列表中键入内容时没有排序,如果有人知道,请告诉我代码中的错误 logcat消息,代码正在运行,但searchview不工作 这是我的适配器java类 片段java文件Java android:使用自定义适配器在ListView中添加SearchView,java,android,listview,android-searchmanager,android-filter,Java,Android,Listview,Android Searchmanager,Android Filter,我正在创建一个包含3个选项卡片段的应用程序。这是片段之一,数据显示在列表视图中。在列表视图中添加搜索筛选器时,我遇到了麻烦 我已经在这个片段和列表中添加了搜索视图,所有内容都正常工作,没有任何错误,但是,当在搜索视图列表中键入内容时没有排序,如果有人知道,请告诉我代码中的错误 logcat消息,代码正在运行,但searchview不工作 这是我的适配器java类 片段java文件 导入android.content.Context; 导入android.os.Bundle; 导入android
导入android.content.Context;
导入android.os.Bundle;
导入android.util.Log;
导入android.view.LayoutInflater;
导入android.view.view;
导入android.view.ViewGroup;
导入android.widget.ArrayAdapter;
导入android.widget.ImageView;
导入android.widget.ListView;
导入android.widget.SearchView;
导入com.parse.FindCallback;
导入com.parse.ParseException;
导入com.parse.parse文件;
导入com.parse.ParseObject;
导入com.parse.ParseQuery;
导入java.net.URL;
导入java.util.ArrayList;
导入java.util.List;
公共类个人扩展了android.support.v4.app.ListFragment
实现FindCallback{
私有列表组织=新建ArrayList();
SearchView sv;
个体接受器;
@凌驾
CreateView上的公共视图(布局、充气机、视图组容器、捆绑包保存状态){
返回充气机。充气(右布局。个人,容器,假);
}
@凌驾
已创建公用void onview(视图,捆绑包b){
super.onViewCreated(视图,b);
sv=(SearchView)view.findViewById(R.id.searchView1);
最终个体适配器=新个体适配器(getActivity(),mOrganization);
setListAdapter(适配器);
graseQuery.getQuery(“_User”).findInBackground(this);
sv.setOnQueryTextListener(新的SearchView.OnQueryTextListener(){
@凌驾
公共布尔值onQueryTextSubmit(字符串文本){
//TODO自动生成的方法存根
返回false;
}
@凌驾
公共布尔值onQueryTextChange(字符串文本){
adapter.getFilter().filter(文本);
返回false;
}
});
}
@凌驾
已完成公共作废(列表分数列表,Parsee异常){
如果(e==null){
Log.d(“score”,“Retrieved”+scoreList.size()+“_User”);
组织。清除();
mOrganization.addAll(记分表);
((IndividualsAdaptor)getListAdapter()).notifyDataSetChanged();
}否则{
Log.d(“分数”,“错误:+e.getMessage());
}
}
}
列表视图xml
数据xml
为视图创建一个类变量
View view;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
view=inflater.inflate(R.layout.individuals, container, false);
return view;
}
在“搜索”视图中使用此选项
SearchView searchView = (SearchView)view.findViewById(R.id.searchTextView);
可以使用此布局
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:orientation="vertical"
android:layout_width="match_parent"
android:weightSum="1"
android:layout_height="match_parent">
<TextView android:id="@id/android:empty"
android:text="No data"
android:layout_width="match_parent"
android:layout_weight="0.1"
android:layout_height="0dp"
tools:ignore="HardcodedText" />
<SearchView
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="0.1"
android:id="@+id/searchUserTextField"
android:background="@android:color/holo_red_dark"
android:textColor="@android:color/white"
android:textSize="14sp"
android:hint="Search by Name or Company"
android:textColorHint="#fff" />
<ListView android:id="@id/android:list"
android:layout_width="match_parent"
android:layout_weight="0.6"
android:layout_height="wrap_content"
/>
<ImageView
android:id="@+id/imageView7"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:layout_weight="0.2"
android:src="@mipmap/ic_launcher"/>
</LinearLayout>
我认为问题在于:
SearchView searchView = (SearchView)view.findViewById(R.id.searchTextView);
view=inflater.inflate(R.layout.individuals, container, false);
您在创建视图之前调用searchview请尝试以下适配器代码:
public class IndividualsAdaptor extends ArrayAdapter {
protected Context mContext;
// Code for Custom Filter.
protected List mBackupList = new ArrayList();
public IndividualsAdaptor(Context context, List status) {
super(context, R.layout.t3, status);
mContext = context;
// Code for Custom Filter.
mBackupList.addAll(status);
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
ViewHolder holder;
if (android.os.Build.VERSION.SDK_INT > 9) {
StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
StrictMode.setThreadPolicy(policy);
}
if (convertView == null) {
convertView = LayoutInflater.from(mContext).inflate(R.layout.t3, null);
holder = new ViewHolder();
holder.usernameHomepage = (TextView) convertView.findViewById(R.id.fname);
holder.statusHomepage = (TextView) convertView.findViewById(R.id.lname);
holder.pposition = (TextView) convertView.findViewById(R.id.idposition);
holder.orgName = (TextView) convertView.findViewById(R.id.organizationname);
holder.logo = (ImageView) convertView.findViewById(R.id.imageView);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
ParseObject statusObject = (ParseObject) getItem(position);
// title
String username = statusObject.getString("firstname");
holder.usernameHomepage.setText(username);
// content
String status = statusObject.getString("lastname");
holder.statusHomepage.setText(status);
// content
String positions = statusObject.getString("position");
holder.pposition.setText(positions);
// content
String org = statusObject.getString("organizationName");
holder.orgName.setText(org);
// logo
URL url = null;
Bitmap bmp = null;
try {
url = new URL("img hosting location" + statusObject.getString("image"));
bmp = BitmapFactory.decodeStream(url.openConnection().getInputStream());
} catch (MalformedURLException e) {
}catch (IOException e) {
}
holder.logo.setImageBitmap(bmp);
Picasso.with(mContext)
.load(String.valueOf(url))
.into(((ImageView) convertView
.findViewById(R.id.imageView)));
return convertView;
}
public static class ViewHolder {
TextView usernameHomepage;
TextView statusHomepage;
TextView orgName;
TextView pposition;
ImageView logo;
}
// Code for Custom Filter.
@Override
public Filter getFilter() {return new Filter(){
@Override
protected FilterResults performFiltering(CharSequence charSequence) {
String queryString = charSequence.toString().toLowerCase();
List<ParseObject> filteredList = new ArrayList<>();
ParseObject tmpItem;
String tmpUsername, tmpStatus, tmpPositions, tmpOrg;
for(int i=0; i<mBackupList.size(); i++){
tmpItem = (ParseObject) mBackupList.get(i);
tmpUsername = tmpItem.getString("firstname").toLowerCase();
tmpStatus = tmpItem.getString("lastname").toLowerCase();
tmpPositions = tmpItem.getString("position").toLowerCase();
tmpOrg = tmpItem.getString("organizationName").toLowerCase();
// The matching condition
if(tmpUsername.contains(queryString)||tmpStatus.contains(queryString)||
tmpPositions.contains(queryString)||tmpOrg.contains(queryString)){
filteredList.add(tmpItem);
}
}
FilterResults filterResults = new FilterResults();
filterResults.count = filteredList.size();
filterResults.values = filteredList;
return filterResults;
}
@Override
protected void publishResults(CharSequence charSequence, Filter.FilterResults filterResults) {
clear();
addAll((List<ParseObject>) filterResults.values);
}
};}
public void updateBackupList(List newList){
mBackupList.clear();
mBackupList.addAll(newList);
}
}
公共类IndividualsAdaptor扩展ArrayAdapter{
保护上下文mContext;
//自定义过滤器的代码。
受保护列表mBackupList=新的ArrayList();
公共个人适配器(上下文、列表状态){
超级(上下文,R.layout.t3,状态);
mContext=上下文;
//自定义过滤器的代码。
mBackupList.addAll(状态);
}
@凌驾
公共视图getView(最终整数位置、视图转换视图、视图组父视图){
视窗座;
如果(android.os.Build.VERSION.SDK_INT>9){
StrictMode.ThreadPolicy policy=新建StrictMode.ThreadPolicy.Builder().permitAll().build();
StrictMode.setThreadPolicy(策略);
}
if(convertView==null){
convertView=LayoutFlater.from(mContext).充气(R.layout.t3,空);
holder=新的ViewHolder();
holder.usernameHomepage=(TextView)convertView.findViewById(R.id.fname);
holder.statusHomepage=(TextView)convertView.findViewById(R.id.lname);
holder.position=(TextView)convertView.findViewById(R.id.idposition);
holder.orgName=(TextView)convertView.findViewById(R.id.organizationname);
holder.logo=(ImageView)convertView.findViewById(R.id.ImageView);
convertView.setTag(支架);
}否则{
holder=(ViewHolder)convertView.getTag();
}
ParseObject statusObject=(ParseObject)getItem(位置);
//头衔
字符串用户名=statusObject.getString(“firstname”);
holder.usernameHomepage.setText(用户名);
//内容
字符串状态=statusObject.getString(“lastname”);
holder.statusHomepage.setText(状态);
//内容
字符串位置=statusObject.getString(“位置”);
holder.position.setText(位置);
//内容
String org=statusObject.getString(“organizationName”);
holder.orgName.setText(org);
//标志
URL=null;
位图bmp=null;
试一试{
url=新url(“img托管位置”+statusObject.getString(“图像”);
bmp=BitmapFactory.decodeStream(url.openConnection().getInputStream());
}捕获(格式错误){
}捕获(IOE异常){
}
holder.logo.setImageBitmap(bmp);
毕加索(McContext)
.load(字符串.valueOf(url))
.转换为(((图像视图)转换视图
.findviewbyd(R.id.imageView));
返回视图;
}
公共静态类视图持有者{
TextView用户名主页;
文本视图状态主页;
TextView orgName;
文本视图预设;
ImageView徽标;
}
//自定义过滤器的代码。
@凌驾
公共筛选器getFilter(){返回新筛选器(){
@凌驾
受保护过滤器结果执行过滤(CharSequence CharSequence){
String queryString=charSequence.toString().toLowerCase();
List filteredList=新建ArrayList();
解析对象tmpItem;
字符串tmpUs
View view;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
view=inflater.inflate(R.layout.individuals, container, false);
return view;
}
SearchView searchView = (SearchView)view.findViewById(R.id.searchTextView);
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:orientation="vertical"
android:layout_width="match_parent"
android:weightSum="1"
android:layout_height="match_parent">
<TextView android:id="@id/android:empty"
android:text="No data"
android:layout_width="match_parent"
android:layout_weight="0.1"
android:layout_height="0dp"
tools:ignore="HardcodedText" />
<SearchView
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="0.1"
android:id="@+id/searchUserTextField"
android:background="@android:color/holo_red_dark"
android:textColor="@android:color/white"
android:textSize="14sp"
android:hint="Search by Name or Company"
android:textColorHint="#fff" />
<ListView android:id="@id/android:list"
android:layout_width="match_parent"
android:layout_weight="0.6"
android:layout_height="wrap_content"
/>
<ImageView
android:id="@+id/imageView7"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:layout_weight="0.2"
android:src="@mipmap/ic_launcher"/>
</LinearLayout>
SearchView searchView = (SearchView)view.findViewById(R.id.searchTextView);
view=inflater.inflate(R.layout.individuals, container, false);
public class IndividualsAdaptor extends ArrayAdapter {
protected Context mContext;
// Code for Custom Filter.
protected List mBackupList = new ArrayList();
public IndividualsAdaptor(Context context, List status) {
super(context, R.layout.t3, status);
mContext = context;
// Code for Custom Filter.
mBackupList.addAll(status);
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
ViewHolder holder;
if (android.os.Build.VERSION.SDK_INT > 9) {
StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
StrictMode.setThreadPolicy(policy);
}
if (convertView == null) {
convertView = LayoutInflater.from(mContext).inflate(R.layout.t3, null);
holder = new ViewHolder();
holder.usernameHomepage = (TextView) convertView.findViewById(R.id.fname);
holder.statusHomepage = (TextView) convertView.findViewById(R.id.lname);
holder.pposition = (TextView) convertView.findViewById(R.id.idposition);
holder.orgName = (TextView) convertView.findViewById(R.id.organizationname);
holder.logo = (ImageView) convertView.findViewById(R.id.imageView);
convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
}
ParseObject statusObject = (ParseObject) getItem(position);
// title
String username = statusObject.getString("firstname");
holder.usernameHomepage.setText(username);
// content
String status = statusObject.getString("lastname");
holder.statusHomepage.setText(status);
// content
String positions = statusObject.getString("position");
holder.pposition.setText(positions);
// content
String org = statusObject.getString("organizationName");
holder.orgName.setText(org);
// logo
URL url = null;
Bitmap bmp = null;
try {
url = new URL("img hosting location" + statusObject.getString("image"));
bmp = BitmapFactory.decodeStream(url.openConnection().getInputStream());
} catch (MalformedURLException e) {
}catch (IOException e) {
}
holder.logo.setImageBitmap(bmp);
Picasso.with(mContext)
.load(String.valueOf(url))
.into(((ImageView) convertView
.findViewById(R.id.imageView)));
return convertView;
}
public static class ViewHolder {
TextView usernameHomepage;
TextView statusHomepage;
TextView orgName;
TextView pposition;
ImageView logo;
}
// Code for Custom Filter.
@Override
public Filter getFilter() {return new Filter(){
@Override
protected FilterResults performFiltering(CharSequence charSequence) {
String queryString = charSequence.toString().toLowerCase();
List<ParseObject> filteredList = new ArrayList<>();
ParseObject tmpItem;
String tmpUsername, tmpStatus, tmpPositions, tmpOrg;
for(int i=0; i<mBackupList.size(); i++){
tmpItem = (ParseObject) mBackupList.get(i);
tmpUsername = tmpItem.getString("firstname").toLowerCase();
tmpStatus = tmpItem.getString("lastname").toLowerCase();
tmpPositions = tmpItem.getString("position").toLowerCase();
tmpOrg = tmpItem.getString("organizationName").toLowerCase();
// The matching condition
if(tmpUsername.contains(queryString)||tmpStatus.contains(queryString)||
tmpPositions.contains(queryString)||tmpOrg.contains(queryString)){
filteredList.add(tmpItem);
}
}
FilterResults filterResults = new FilterResults();
filterResults.count = filteredList.size();
filterResults.values = filteredList;
return filterResults;
}
@Override
protected void publishResults(CharSequence charSequence, Filter.FilterResults filterResults) {
clear();
addAll((List<ParseObject>) filterResults.values);
}
};}
public void updateBackupList(List newList){
mBackupList.clear();
mBackupList.addAll(newList);
}
}
public class Individuals extends ListFragment {
private List<ParseObject> mOrganization = new ArrayList<ParseObject>();
SearchView sv;
IndividualsAdaptor adaptor;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
return inflater.inflate(R.layout.individuals, container, false);
}
@Override
public void onViewCreated(View view, Bundle b) {
super.onViewCreated(view, b);
sv = (SearchView) view.findViewById(R.id.searchView1);
adaptor = new IndividualsAdaptor(getActivity(), mOrganization);
setListAdapter(adaptor);
ParseQuery.getQuery("_User").findInBackground(this);
sv.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
@Override
public boolean onQueryTextSubmit(String text) {
return false;
}
@Override
public boolean onQueryTextChange(String text) {
adaptor.getFilter().filter(text);
return true;
}
});
}
@Override
public void done(List<ParseObject> scoreList, ParseException e) {
if (e == null) {
Log.d("score", "Retrieved " + scoreList.size() + " _User");
mOrganization.clear();
mOrganization.addAll(scoreList);
((IndividualsAdaptor) getListAdapter()).updateBackupList(mOrganization);
((IndividualsAdaptor) getListAdapter()).notifyDataSetChanged();
} else {
Log.d("score", "Error: " + e.getMessage());
}
}
}