Java [Android]如何只搜索名字和姓氏?
这是我的主要活动Java [Android]如何只搜索名字和姓氏?,java,android,Java,Android,这是我的主要活动 package com.example.search; import java.util.ArrayList; import java.util.Arrays; import java.util.HashMap; import java.util.Iterator; import java.util.List; import android.app.Activity; import android.content.Context; import android.os.B
package com.example.search;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.support.v4.app.FragmentActivity;
import android.text.Editable;
import android.text.TextWatcher;
import android.widget.ArrayAdapter;
import android.widget.EditText;
import android.widget.Filter;
import android.widget.ListView;
public User getUserByName(String firstName, String lastName) {
synchronized (userList) {
Iterator<User> iterator = userList.iterator();
while (iterator.hasNext()) {
User user = (User) iterator.next();
if (user.getFirstName().equals(firstName)
&& user.getLastName().equals(lastName)) {
return user;
}
}
// no user found
return null;
}
}
public class MainActivity extends FragmentActivity {
private EditText firstNameEditText;
private EditText lastNameEditText;
private UserListAdapter<User> adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
firstNameEditText = (EditText) findViewById(R.id.firstNameEditText);
lastNameEditText = (EditText) findViewById(R.id.lastNameEditText);
final ListView listView = (ListView) findViewById(R.id.listView);
ArrayList<User> usersList = new ArrayList<User>();
// add items to list
adapter = new UserListAdapter<User>(this,
R.layout.textview_layout, usersList);
listView.setAdapter(adapter);
firstNameEditText.setOnFocusChangeListener(new View.OnFocusChangeListener() {
@Override
public void onFocusChange(View v, boolean hasFocus) {
if(hasFocus) {
adapter.setFilterMode(UserListAdapter.MODE_FILTER_BY_FIRST_NAME);
}
}
});
lastNameEditText.setOnFocusChangeListener(new View.OnFocusChangeListener() {
@Override
public void onFocusChange(View v, boolean hasFocus) {
if(hasFocus) {
adapter.setFilterMode(UserListAdapter.MODE_FILTER_BY_LAST_NAME);
}
}
});
TextWatcher textWatcher = new TextWatcher() {
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count,
int after) {
}
@Override
public void afterTextChanged(Editable s) {
adapter.getFilter().filter(s.toString());
}
};
firstNameEditText.addTextChangedListener(textWatcher);
lastNameEditText.addTextChangedListener(textWatcher);
}
public static class UserListAdapter<T> extends ArrayAdapter<T> {
public static final int MODE_FILTER_BY_FIRST_NAME = 0xFEED;
public static final int MODE_FILTER_BY_LAST_NAME = 0xDEAF;
private List<T> objects;
private int filterMode;
public UserListAdapter(Context context, int textViewResourceId,
List<T> objects) {
super(context, textViewResourceId, objects);
init(objects);
}
public UserListAdapter(Context context, int resource,
int textViewResourceId, T[] objects) {
super(context, resource, textViewResourceId, objects);
init(Arrays.asList(objects));
}
private void init(List<T> objects) {
this.objects = objects;
}
public UserListAdapter(Context context, int resource,
int textViewResourceId, List<T> objects) {
super(context, resource, textViewResourceId, objects);
init(objects);
}
public UserListAdapter(Context context, int resource,
int textViewResourceId) {
super(context, resource, textViewResourceId);
}
public UserListAdapter(Context context, int resource) {
super(context, resource);
}
@Override
public Filter getFilter() {
return new Filter() {
@Override
protected void publishResults(CharSequence constraint,
FilterResults results) {
UserListAdapter.this.clear();
ArrayList<T> list = (ArrayList<T>) results.values;
UserListAdapter.this.addAll(list);
if (results.count > 0) {
notifyDataSetChanged();
} else {
notifyDataSetInvalidated();
}
}
@Override
protected synchronized FilterResults performFiltering(
CharSequence constraint) {
FilterResults results = new FilterResults();
ArrayList<T> list = new ArrayList<T>();
Iterator<T> iterator = objects.iterator();
while (iterator.hasNext()) {
T t = (T) iterator.next();
User user = (User) t;
String s = null;
if (filterMode == MODE_FILTER_BY_FIRST_NAME) {
s = user.getFirstName();
} else if (filterMode == MODE_FILTER_BY_LAST_NAME) {
s = user.getLastName();
}
if (s.equals(constraint.toString())) {
list.add(t);
}
}
results.values = list;
results.count = list.size();
return results;
}
};
}
public int getFilterMode() {
return filterMode;
}
public void setFilterMode(int filterMode) {
this.filterMode = filterMode;
}
}
public static class User {
// attributes
private String accountID;
private String companyName;
private String designation;
private String firstName;
private String lastName;
private String profileimageBLOB;
// behaviors
public User() // default constructor
{
// attributes will be initialized to their default values
}
public User(String accID, String comName, String design, String fName,
String lName, String image) // parameterized constructor
{
accountID = accID;
companyName = comName;
designation = design;
firstName = fName;
lastName = lName;
profileimageBLOB = image;
}
// set and get methods
public void setAccountID(String accID) {
accountID = accID;
}
public String getAccountID() {
return accountID;
}
public void setCompanyName(String comName) {
companyName = comName;
}
public String getCompanyName() {
return companyName;
}
public void setDesignation(String design) {
designation = design;
}
public String getDesignation() {
return designation;
}
public void setFirstName(String fName) {
firstName = fName;
}
public String getFirstName() {
return firstName;
}
public void setLastName(String lName) {
lastName = lName;
}
public String getLastName() {
return lastName;
}
public void setProfileImage(String image) {
profileimageBLOB = image;
}
public String getProfileImage() {
return firstName;
}
// toString() method
public String toString() {
return accountID + "\t" + companyName + "\t" + designation + "\t\t"
+ firstName + "\t" + lastName + "\t" + profileimageBLOB;
}
}
package com.example.search;
导入java.util.ArrayList;
导入java.util.array;
导入java.util.HashMap;
导入java.util.Iterator;
导入java.util.List;
导入android.app.Activity;
导入android.content.Context;
导入android.os.Bundle;
导入android.support.v4.app.FragmentActivity;
导入android.text.Editable;
导入android.text.TextWatcher;
导入android.widget.ArrayAdapter;
导入android.widget.EditText;
导入android.widget.Filter;
导入android.widget.ListView;
公共用户getUserByName(字符串firstName、字符串lastName){
已同步(用户列表){
迭代器迭代器=userList.Iterator();
while(iterator.hasNext()){
User=(User)迭代器.next();
if(user.getFirstName().equals(firstName)
&&user.getLastName().equals(lastName)){
返回用户;
}
}
//找不到用户
返回null;
}
}
公共类MainActivity扩展了FragmentActivity{
私有EditText firstNameEditText;
私有EditText lastNameEditText;
私有用户列表适配器;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
firstNameEditText=(EditText)findViewById(R.id.firstNameEditText);
lastNameEditText=(EditText)findViewById(R.id.lastNameEditText);
最终ListView ListView=(ListView)findViewById(R.id.ListView);
ArrayList usersList=新的ArrayList();
//将项目添加到列表中
adapter=新的UserListAdapter(此,
R.layout.textview_布局,用户列表);
setAdapter(适配器);
firstNameEditText.setOnFocusChangeListener(新视图.OnFocusChangeListener(){
@凌驾
public void onFocusChange(视图v,布尔hasFocus){
如果(hasFocus){
adapter.setFilterMode(UserListAdapter.MODE_按名称过滤);
}
}
});
lastNameEditText.setOnFocusChangeListener(新视图.OnFocusChangeListener()中){
@凌驾
public void onFocusChange(视图v,布尔hasFocus){
如果(hasFocus){
setFilterMode(UserListAdapter.MODE\u按姓氏过滤);
}
}
});
TextWatcher TextWatcher=新的TextWatcher(){
@凌驾
public void onTextChanged(字符序列、int start、int before、int count){
}
@凌驾
更改前的公共无效(字符序列、整数开始、整数计数、,
整数后){
}
@凌驾
公共无效后文本已更改(可编辑){
adapter.getFilter().filter(s.toString());
}
};
firstNameEditText.addTextChangedListener(textWatcher);
lastNameEditText.addTextChangedListener(textWatcher);
}
公共静态类UserListAdapter扩展了ArrayAdapter{
公共静态final int MODE_FILTER_BY_FIRST_NAME=0xFEED;
公共静态最终整数模式\u按\u姓氏\u筛选\u=0xDEAD;
私有列表对象;
私有int filterMode;
公共UserListAdapter(上下文,int textViewResourceId,
列出对象){
超级(上下文、textViewResourceId、对象);
init(对象);
}
公共UserListAdapter(上下文、int资源、,
int textViewResourceId,T[]对象){
超级(上下文、资源、textViewResourceId、对象);
init(Arrays.asList(objects));
}
私有void init(列出对象){
this.objects=对象;
}
公共UserListAdapter(上下文、int资源、,
int textViewResourceId,列出对象){
超级(上下文、资源、textViewResourceId、对象);
init(对象);
}
公共UserListAdapter(上下文、int资源、,
int textViewResourceId){
超级(上下文、资源、textViewResourceId);
}
公共UserListAdapter(上下文,int资源){
超级(上下文、资源);
}
@凌驾
公共过滤器getFilter(){
返回新筛选器(){
@凌驾
受保护的无效发布结果(CharSequence约束,
FilterResults(结果){
UserListAdapter.this.clear();
ArrayList=(ArrayList)results.values;
UserListAdapter.this.addAll(列表);
如果(results.count>0){
notifyDataSetChanged();
}否则{
notifyDataSetionValidated();
}
}
@凌驾
受保护的同步筛选器结果性能筛选(
字符序列约束){
FilterResults results=新的FilterResults();
ArrayList=新建ArrayList();
迭代器迭代器=objects.Iterator();
while(iterator.hasNext()){
T=(T)迭代器.next();
用户=(用户)t;
字符串s=null;
if(filterMode==模式\u按\u名字\u筛选){
s=user.getFirstName();
}else if(filterMode==模式\u按\u姓氏\u筛选){
s=user.getLastName();
}
如果(s.equals(constraint.toString())){
列表。添加(t);
}
}
结果.值=列表;
public User getUserByName(String firstName, String lastName) {
synchronized (userList) {
Iterator<User> iterator = userList.iterator();
while (iterator.hasNext()) {
User user = (User) iterator.next();
if (user.getFirstName().equals(firstName)
&& user.getLastName().equals(lastName)) {
return user;
}
}
// no user found
return null;
}
}
public class MainActivity extends FragmentActivity {
private EditText firstNameEditText;
private EditText lastNameEditText;
private UserListAdapter<User> adapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
firstNameEditText = (EditText) findViewById(R.id.firstNameEditText);
lastNameEditText = (EditText) findViewById(R.id.lastNameEditText);
final ListView listView = (ListView) findViewById(R.id.listView);
ArrayList<User> usersList = new ArrayList<User>();
// add items to list
adapter = new UserListAdapter<User>(this,
R.layout.textview_layout, usersList);
listView.setAdapter(adapter);
firstNameEditText.setOnFocusChangeListener(new View.OnFocusChangeListener() {
@Override
public void onFocusChange(View v, boolean hasFocus) {
if(hasFocus) {
adapter.setFilterMode(UserListAdapter.MODE_FILTER_BY_FIRST_NAME);
}
}
});
lastNameEditText.setOnFocusChangeListener(new View.OnFocusChangeListener() {
@Override
public void onFocusChange(View v, boolean hasFocus) {
if(hasFocus) {
adapter.setFilterMode(UserListAdapter.MODE_FILTER_BY_LAST_NAME);
}
}
});
TextWatcher textWatcher = new TextWatcher() {
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count,
int after) {
}
@Override
public void afterTextChanged(Editable s) {
adapter.getFilter().filter(s.toString());
}
};
firstNameEditText.addTextChangedListener(textWatcher);
lastNameEditText.addTextChangedListener(textWatcher);
}
public static class UserListAdapter<T> extends ArrayAdapter<T> {
public static final int MODE_FILTER_BY_FIRST_NAME = 0xFEED;
public static final int MODE_FILTER_BY_LAST_NAME = 0xDEAF;
private List<T> objects;
private int filterMode;
public UserListAdapter(Context context, int textViewResourceId,
List<T> objects) {
super(context, textViewResourceId, objects);
init(objects);
}
public UserListAdapter(Context context, int resource,
int textViewResourceId, T[] objects) {
super(context, resource, textViewResourceId, objects);
init(Arrays.asList(objects));
}
private void init(List<T> objects) {
this.objects = objects;
}
public UserListAdapter(Context context, int resource,
int textViewResourceId, List<T> objects) {
super(context, resource, textViewResourceId, objects);
init(objects);
}
public UserListAdapter(Context context, int resource,
int textViewResourceId) {
super(context, resource, textViewResourceId);
}
public UserListAdapter(Context context, int resource) {
super(context, resource);
}
@Override
public Filter getFilter() {
return new Filter() {
@Override
protected void publishResults(CharSequence constraint,
FilterResults results) {
UserListAdapter.this.clear();
ArrayList<T> list = (ArrayList<T>) results.values;
UserListAdapter.this.addAll(list);
if (results.count > 0) {
notifyDataSetChanged();
} else {
notifyDataSetInvalidated();
}
}
@Override
protected synchronized FilterResults performFiltering(
CharSequence constraint) {
FilterResults results = new FilterResults();
ArrayList<T> list = new ArrayList<T>();
Iterator<T> iterator = objects.iterator();
while (iterator.hasNext()) {
T t = (T) iterator.next();
User user = (User) t;
String s = null;
if (filterMode == MODE_FILTER_BY_FIRST_NAME) {
s = user.getFirstName();
} else if (filterMode == MODE_FILTER_BY_LAST_NAME) {
s = user.getLastName();
}
if (s.equals(constraint.toString())) {
list.add(t);
}
}
results.values = list;
results.count = list.size();
return results;
}
};
}
public int getFilterMode() {
return filterMode;
}
public void setFilterMode(int filterMode) {
this.filterMode = filterMode;
}
}
public static class User {
// attributes
private String accountID;
private String companyName;
private String designation;
private String firstName;
private String lastName;
private String profileimageBLOB;
// behaviors
public User() // default constructor
{
// attributes will be initialized to their default values
}
public User(String accID, String comName, String design, String fName,
String lName, String image) // parameterized constructor
{
accountID = accID;
companyName = comName;
designation = design;
firstName = fName;
lastName = lName;
profileimageBLOB = image;
}
// set and get methods
public void setAccountID(String accID) {
accountID = accID;
}
public String getAccountID() {
return accountID;
}
public void setCompanyName(String comName) {
companyName = comName;
}
public String getCompanyName() {
return companyName;
}
public void setDesignation(String design) {
designation = design;
}
public String getDesignation() {
return designation;
}
public void setFirstName(String fName) {
firstName = fName;
}
public String getFirstName() {
return firstName;
}
public void setLastName(String lName) {
lastName = lName;
}
public String getLastName() {
return lastName;
}
public void setProfileImage(String image) {
profileimageBLOB = image;
}
public String getProfileImage() {
return firstName;
}
// toString() method
public String toString() {
return accountID + "\t" + companyName + "\t" + designation + "\t\t"
+ firstName + "\t" + lastName + "\t" + profileimageBLOB;
}
}
}