Edittext中搜索listview列表中的内容并列出来

lzc_a 2016-01-08 02:25:07
不知道如何在edittext 的onTextChanged监听方法中实现,,,求助

import java.util.ArrayList;
import android.annotation.SuppressLint;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.DialogInterface.OnClickListener;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.support.v4.app.Fragment;
import android.text.Editable;
import android.text.TextWatcher;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.CheckBox;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.TextView;

public class ServerListFragment extends Fragment {

private EditText mEditSearch;
private ListView mListView;
private static final String TAG="lzc_1111";
private static final int MESSAGE_SERVERLIST=0;
private ArrayList<ServerInfo> mServers;
private ServerInfoAdapter adapter;


@SuppressLint("HandlerLeak")
private Handler handlerSjzx=new Handler(){
@SuppressWarnings("unchecked")
public void handleMessage(Message msg){
super.handleMessage(msg);
switch(msg.what){
case 0:
mServers=(ArrayList<ServerInfo>)msg.obj;
//将从网络中取得的数据,写入ServerLab中的mServer变量中存储
Log.d(TAG, "数据写入ServerLab成功!");
ServerLab.get(getActivity()).setServers(mServers);
adapter=new ServerInfoAdapter(mServers);
mListView.setAdapter(adapter);
Log.d(TAG, "listview中数据填充成功");
break;
default:
break;
}

}
};

@Override
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
//允许显示选项菜单
setHasOptionsMenu(true);
getActivity().setTitle(R.string.serverlist_title);

new Thread(new Runnable(){
@Override
public void run(){
Log.d(TAG ,"线程启动!");
ArrayList<ServerInfo> mServers=GetData.getSjzxList();
Message message=new Message();
message.what=MESSAGE_SERVERLIST;
message.obj=mServers;
handlerSjzx.sendMessage(message);
}
}).start();

}

//实例化生成桌面右上角的选项菜单
@Override
public void onCreateOptionsMenu(Menu menu,MenuInflater inflater){
super.onCreateOptionsMenu(menu, inflater);
inflater.inflate(R.menu.fragment_server_list, menu);
}
//响应菜单选项
@Override
public boolean onOptionsItemSelected(MenuItem item){
switch(item.getItemId()){
case R.id.menu_item_about:
about();
default:
return super.onContextItemSelected(item);

}
}

public void about() {
String s = "作者:傳說" + "\r\n" + getVersion();
new AlertDialog.Builder(getActivity()).setTitle("关于软件").setMessage(s)
.setPositiveButton("确定", new OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
}
}).show();
}

//获取本应用的版本号
public String getVersion() {
try {
PackageManager manager = getActivity().getPackageManager();
PackageInfo info = manager.getPackageInfo(getActivity().getPackageName(), 0);
String version = info.versionName;
return "版本:V" + version;
} catch (Exception e) {
e.printStackTrace();
return null;
}
}


@Override
public View onCreateView(LayoutInflater inflater,ViewGroup container,Bundle savedInstanceState){
View v=inflater.inflate(R.layout.servers_list, container, false);
mListView=(ListView)v.findViewById(R.id.myList);
mListView.setTextFilterEnabled(true);
mListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
public void onItemClick(AdapterView<?> parent,View view,int position,long id){
ServerInfo s=mServers.get(position);
Log.d(TAG, s.getRegionName()+"被点击");
Intent i=new Intent(getActivity(),ServerInfoPagerActivity.class);
i.putExtra(ServerInfoFragment.EXTRA_WEBIP, s.getWebIp());
startActivity(i);
}
});

mEditSearch=(EditText)v.findViewById(R.id.editSearch);
mEditSearch.addTextChangedListener(new TextWatcher(){

public void onTextChanged(CharSequence c, int start, int before, int count){


// adapter.getFilter().filter(c);
// adapter.notifyDataSetChanged();
// mListView.setAdapter(adapter);

}
public void beforeTextChanged(CharSequence c, int start, int before, int count){
// TODO Auto-generated method stub
//这是文本框改变之前会执行的动作
}
public void afterTextChanged(Editable c){
// TODO Auto-generated method stub
/**这是文本框改变之后 会执行的动作
* 因为我们要做的就是,在文本框改变的同时,我们的listview的数据也进行相应的变动,并且如一的显示在界面上。
* 所以这里我们就需要加上数据的修改的动作了。
*/
// if(c.length() == 0){
// ivDeleteText.setVisibility(View.GONE);//当文本框为空时,则叉叉消失
// }
// else {
// ivDeleteText.setVisibility(View.VISIBLE);//当文本框不为空时,出现叉叉
// myhandler.post(eChanged);
// }
}
});

return v;

}

@SuppressLint("InflateParams")
//自定义ListFragment的显示方式
private class ServerInfoAdapter extends ArrayAdapter<ServerInfo>{
public ServerInfoAdapter(ArrayList<ServerInfo> mServers){
super(getActivity(),0,mServers);
}

@Override
public View getView(int position,View convertView,ViewGroup parent){
if(convertView==null){
convertView=getActivity().getLayoutInflater().inflate(R.layout.list_item_serverinfo, null);
}

ServerInfo s=getItem(position);

TextView servernameTextView=(TextView)convertView.findViewById(R.id.serverinfo_list_item_servernameTextView);
servernameTextView.setText(s.getRegionName());
TextView webipTextView=(TextView)convertView.findViewById(R.id.serverinfo_list_item_webipTextView);
String webwz;
if("80".equals(s.getWebPort())){
webwz="http://"+s.getWebIp();
}else{
webwz="http://"+s.getWebIp()+":"+s.getWebPort();
}

webipTextView.setText(webwz);
CheckBox solvedCheckBox=(CheckBox)convertView.findViewById(R.id.serverinfo_list_item_solvedCheckBox);
solvedCheckBox.setChecked(s.getWebFlag());

return convertView;

}


}

}
...全文
441 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
??Ben 2018-01-17
  • 打赏
  • 举报
回复
我这边有个后台管理系统要做页面,也是有搜索功能,支持模糊搜索,然后是点击搜索按钮会出现后台所有游戏,每个游戏都能点击进入到数据展现的页面,应该怎么做
lzc_a 2016-01-26
  • 打赏
  • 举报
回复
问题已解决,核心
引用 3 楼 u012740751 的回复:
mEdtSearch.addTextChangedListener(new TextWatcher() { @Override public void onTextChanged(CharSequence s, int start, int before, int count) { filterData(s.toString()); } @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { } @Override public void afterTextChanged(Editable s) { } }); private void filterData(String filterStr) { List<House> changeDatas = new ArrayList<House>(); if (TextUtils.isEmpty(filterStr)) { changeDatas = mList; } else { changeDatas.clear(); for (House house : mList) { String name = house.getName(); String address = house.getAddressStreet(); if (name.indexOf(filterStr.toString()) != -1 || address.indexOf(filterStr.toString()) != -1) { changeDatas.add(house); } } } mAdapterHouse.updata(changeDatas); } 给你个例子。。。大概就死这样。。。根据搜索的内容,在你的list中找出相应的显示出来
谢谢,你的这个很有参考意义;我的实现方法更简单,用的是内部类; 代码如下,供后来者参考
			public void onTextChanged(CharSequence c, int start, int before, int count){
				//在适配器是用内部方法getfilter()筛选数据
				if (c != null && (c.toString()).trim().length() != 0&&adapter!=null){
				adapter.getFilter().filter(c);
				adapter.notifyDataSetChanged();
				}
				
			}
			public void beforeTextChanged(CharSequence c, int start, int before, int count){
				 // TODO Auto-generated method stub
	               //这是文本框改变之前会执行的动作
			}
			public void afterTextChanged(Editable c){
				 // TODO Auto-generated method stub
	               /**这是文本框改变之后 会执行的动作
	                 * 因为我们要做的就是,在文本框改变的同时,我们的listview的数据也进行相应的变动,并且如一的显示在界面上。
	                 * 所以这里我们就需要加上数据的修改的动作了。
	                 */
	               if(c.length() == 0){
	            	   mServers=ServerLab.get(getActivity()).getServers();
	  				 adapter=new ServerInfoAdapter(mServers);
	  				 mListView.setAdapter(adapter);
	                     ivDeleteText.setVisibility(View.GONE);//当文本框为空时,则叉叉消失
	               }
	               else {
	                     ivDeleteText.setVisibility(View.VISIBLE);//当文本框不为空时,出现叉叉
	                    // myhandler.post(eChanged);
	               }			
			}
		});
JPF1024 2016-01-11
  • 打赏
  • 举报
回复
http://www.trinea.cn/android/android-searchview-and-search-tips-impl/ 搜索可以参考下这个。
展翼翔宇 2016-01-11
  • 打赏
  • 举报
回复
是做页面的搜索内容吗
哎,真难 2016-01-11
  • 打赏
  • 举报
回复
autotext看看呗
零度殇 2016-01-11
  • 打赏
  • 举报
回复
mEdtSearch.addTextChangedListener(new TextWatcher() { @Override public void onTextChanged(CharSequence s, int start, int before, int count) { filterData(s.toString()); } @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { } @Override public void afterTextChanged(Editable s) { } }); private void filterData(String filterStr) { List<House> changeDatas = new ArrayList<House>(); if (TextUtils.isEmpty(filterStr)) { changeDatas = mList; } else { changeDatas.clear(); for (House house : mList) { String name = house.getName(); String address = house.getAddressStreet(); if (name.indexOf(filterStr.toString()) != -1 || address.indexOf(filterStr.toString()) != -1) { changeDatas.add(house); } } } mAdapterHouse.updata(changeDatas); } 给你个例子。。。大概就死这样。。。根据搜索的内容,在你的list中找出相应的显示出来
lzc_a 2016-01-10
  • 打赏
  • 举报
回复
还没有人来回答
lzc_a 2016-01-08
  • 打赏
  • 举报
回复
还没有人来回答

80,361

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧