gpt4 book ai didi

java - 如何为自定义布局适配器android studio创建搜索过滤器

转载 作者:行者123 更新时间:2023-12-01 19:15:20 25 4
gpt4 key购买 nike

我可以为具有单个输入的 ListView 创建搜索过滤器,但无法为具有 3 个值的自定义布局执行此操作。使用过滤器时,我创建的所有文本都会从 ListView 中消失。我希望能够过滤任何输入,无论是名字、姓氏还是最喜欢的食物。

(ViewListContents.this).adapter.getFilter().filter(charSequence);

使用此代码不起作用。

ViewListContents 类:

DatabaseHelper myDB;
ArrayList<User> userList;
ListView listView;
User user;
ThreeColumn_ListAdapter adapter;

private List<User> userL = null;
private ArrayList<User> arraylist;

@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.viewcontents_layout);

myDB = new DatabaseHelper(this);
final EditText filter = (EditText) findViewById(R.id.searchFilter);

userList = new ArrayList<>();
Cursor data = myDB.getListContents();
int numRows = data.getCount();
if(numRows == 0){
Toast.makeText(ViewListContents.this,"The Database is empty :(.",Toast.LENGTH_LONG).show();
}else{
int i=0;
while(data.moveToNext()){
user = new User(data.getString(1),data.getString(2),data.getString(3));
userList.add(i,user);
System.out.println(data.getString(1)+" "+data.getString(2)+" "+data.getString(3));
System.out.println(userList.get(i).getFirstName());
i++;
}
adapter = new ThreeColumn_ListAdapter(this,R.layout.list_adapter_view, userList);
listView = (ListView) findViewById(R.id.listView);
listView.setAdapter(adapter);
//listView.setTextFilterEnabled(true);
}
filter.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {

}

@Override
public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
(ViewListContents.this).adapter.getFilter().filter(charSequence);
}

@Override
public void afterTextChanged(Editable editable) {

}
});


}

用户类别:

private String FirstName;
private String LastName;
private String FavFood;

public User(String fName,String lName, String fFood){
FirstName = fName;
LastName = lName;
FavFood = fFood;
}

public String getFirstName() {
return FirstName;
}

public void setFirstName(String firstName) {
FirstName = firstName;
}

public String getLastName() {
return LastName;
}

public void setLastName(String lastName) {
LastName = lastName;
}

public String getFavFood() {
return FavFood;
}

public void setFavFood(String favFood) {
FavFood = favFood;
}

自定义适配器类:

private LayoutInflater mInflater;
private ArrayList<User> users;
private int mViewResourceId;

public ThreeColumn_ListAdapter(Context context, int textViewResourceId, ArrayList<User> users) {
super(context, textViewResourceId, users);
this.users = users;
mInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
mViewResourceId = textViewResourceId;
}

public View getView(int position, View convertView, ViewGroup parent) {
convertView = mInflater.inflate(mViewResourceId, null);

User user = users.get(position);

if (user != null) {
TextView firstName = (TextView) convertView.findViewById(R.id.textFirstName);
TextView lastName = (TextView) convertView.findViewById(R.id.textLastName);
TextView favFood = (TextView) convertView.findViewById(R.id.textFavFood);
if (firstName != null) {
firstName.setText(user.getFirstName());
}
if (lastName != null) {
lastName.setText((user.getLastName()));
}
if (favFood != null) {
favFood.setText((user.getFavFood()));
}
}

return convertView;
}

最佳答案

您有一个名为过滤器的方法(来自从 BaseAdapter 扩展的适配器类)。在此方法(返回 void)中,当检查每个数据项时,不是检查“输入文本”的漏洞,而是通过简单的循环检查“输入文本”的每个部分。按照这个顺序,您可以实现“逻辑或”检查每个部分是否存在。当数据项中包含某个部分时,您可以停止搜索(好吧,此项为 true 以便显示)并且...。

关于java - 如何为自定义布局适配器android studio创建搜索过滤器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59425488/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com