android - 如何在回收站视图中使用编辑文本进行搜索?
问题描述
我正在为我的申请寻找一些帮助。我已经构建了一个应用程序,并且包含了一个聊天功能。在聊天片段中,我有 2 个附加片段,一个用于当前打开的聊天,另一个用于所有可以发送消息的用户。我想在每个片段中加入一个搜索栏,以允许用户找到要发送消息的特定用户。我是
用户分段 XML
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/gold"
tools:context=".ChatFragments.UsersFragment">
<EditText
android:id="@+id/etSearch"
android:layout_width="match_parent"
android:layout_height="50dp"
android:background="@android:color/white"
android:ems="20"
android:hint="@string/search"
android:layout_weight="0.5"
android:paddingLeft="15dp" />
<android.support.v7.widget.RecyclerView
android:id="@+id/recycler_view"
android:layout_below="@+id/etSearch"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
</RelativeLayout>
用户片段 java 类
package com.alicearmstrong.coffeysloyaltyprojectv1.ChatFragments;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.v4.app.Fragment;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.text.Editable;
import android.text.TextWatcher;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.EditText;
import com.alicearmstrong.coffeysloyaltyprojectv1.Adapter.CustomerAdapter;
import com.alicearmstrong.coffeysloyaltyprojectv1.R;
import com.alicearmstrong.coffeysloyaltyprojectv1.database.Customers;
import com.google.firebase.auth.FirebaseAuth;
import com.google.firebase.auth.FirebaseUser;
import com.google.firebase.database.DataSnapshot;
import com.google.firebase.database.DatabaseError;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;
import com.google.firebase.database.ValueEventListener;
import java.util.ArrayList;
import java.util.List;
public class UsersFragment extends Fragment {
private RecyclerView recyclerView;
private CustomerAdapter customerAdapter;
private List<Customers> customersList;
DatabaseReference databaseReference;
EditText etSearch;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
{
// Inflate the layout for this fragment
View view = inflater.inflate( R.layout.fragment_users , container, false);
etSearch = view.findViewById(R.id.etSearch);
recyclerView = view.findViewById( R.id.recycler_view );
recyclerView.setHasFixedSize( true );
recyclerView.setLayoutManager( new LinearLayoutManager( getContext() ) );
customersList = new ArrayList<>( );
readCustomers();
return view;
}
// Method for reading customers
private void readCustomers()
{
final FirebaseUser firebaseUser = FirebaseAuth.getInstance().getCurrentUser();
databaseReference = FirebaseDatabase.getInstance().getReference().child("Customers");
databaseReference.addValueEventListener( new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot)
{
customersList.clear();
for (DataSnapshot snapshot : dataSnapshot.getChildren())
{
Customers customers = snapshot.getValue(Customers.class);
if (!customers.getId().equals(firebaseUser.getUid()))
{
customersList.add( customers );
}
}
customerAdapter = new CustomerAdapter( getContext(), customersList );
recyclerView.setAdapter( customerAdapter );
}
@Override
public void onCancelled( @NonNull DatabaseError databaseError) {
}
} );
}
}
客户适配器.java
package com.alicearmstrong.coffeysloyaltyprojectv1.Adapter;
import android.content.Context;
import android.content.Intent;
import android.support.annotation.NonNull;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Filter;
import android.widget.Filterable;
import android.widget.TextView;
import com.alicearmstrong.coffeysloyaltyprojectv1.uiOwner.chatOwner.MessageActivityOwner;
import com.alicearmstrong.coffeysloyaltyprojectv1.R;
import com.alicearmstrong.coffeysloyaltyprojectv1.database.Customers;
import java.util.ArrayList;
import java.util.List;
public class CustomerAdapter extends RecyclerView.Adapter<CustomerAdapter.ViewHolder>
{
private Context context;
private List<Customers> customersList;
public CustomerAdapter (Context context, List<Customers> customersList)
{
this.customersList = customersList;
this.context = context;
}
@NonNull
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i)
{
// Set layout to user_item for displaying each user
View view = LayoutInflater.from(context).inflate( R.layout.user_item , viewGroup, false);
return new CustomerAdapter.ViewHolder( view );
}
@Override
public void onBindViewHolder(@NonNull ViewHolder viewHolder, int i)
{
final Customers customer = customersList.get( i );
// Set title to user's name
viewHolder.customerName.setText( customer.getFirstName() + " " + customer.getSurname() );
// Open Message Activity when user is selected
viewHolder.itemView.setOnClickListener( new View.OnClickListener() {
@Override
public void onClick(View v)
{
Intent intent = new Intent(context, MessageActivityOwner.class );
intent.putExtra( "userid", customer.getId() );
context.startActivity( intent );
}
} );
}
@Override
public int getItemCount()
{
return customersList.size();
}
/* @Override
public Filter getFilter() {
return exampleFilter;
}
private Filter exampleFilter = new Filter()
{
@Override
protected FilterResults performFiltering(CharSequence constraint) {
List<Customers> filteredList = new ArrayList<>( );
if (constraint == null || constraint.length() == 0)
{
filteredList.addAll( customersList );
}
else
{
// allows search to be case sensitive
String filteredPattern = constraint.toString().toLowerCase().trim();
for(Customers customers : customersList )
{
}
}
}
@Override
protected void publishResults(CharSequence constraint, FilterResults results) {
}
};*/
public class ViewHolder extends RecyclerView.ViewHolder
{
public TextView customerName;
public ViewHolder(@NonNull View view)
{
super( view );
customerName = view.findViewById( R.id.customerName );
}
}
public void upToDate(List<Customers> newList){
customersList = new ArrayList<>();
customersList.addAll(newList);
notifyDataSetChanged();
}
}
客户数据库
package com.alicearmstrong.coffeysloyaltyprojectv1.database;
public class Customers
{
String id, firstName,surname, DOB, contactNumber, email, qrCode;
Integer loyaltyScore;
public Customers(String id, String firstName, String surname, String DOB, String contactNumber, String email, String qrCode, Integer loyaltyScore)
{
this.id = id;
this.firstName = firstName;
this.surname = surname;
this.DOB = DOB;
this.contactNumber = contactNumber;
this.email = email;
this.qrCode = qrCode;
this.loyaltyScore = loyaltyScore;
}
public String getId() {
return id;
}
public String getFirstName()
{
return firstName;
}
public String getSurname()
{
return surname;
}
public String getDOB()
{
return DOB;
}
public String getContactNumber()
{
return contactNumber;
}
public String getEmail()
{
return email;
}
public String getQrCode()
{
return qrCode;
}
public Integer getLoyaltyScore()
{
return loyaltyScore;
}
public Customers()
{
}
}
我读到 addTextChangeListener 方法只是不确定如何实现该方法。任何帮助将不胜感激。
解决方案
为什么在存在 searchView 时使用 textView。检查下面的代码,但让我看看你的客户 java 类,然后我可以更好地帮助你。在第一个设置搜索视图然后通过 id 查找视图然后....
search.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
@Override
public boolean onQueryTextSubmit(String query) {
return false;
}
@Override
public boolean onQueryTextChange(String newText) {
String userInput = newText.toLowerCase();
List<Customers> newList = new ArrayList<>();
for (Customers customersList : accounts) {
if (customersList.customerName.toLowerCase().contains(userInput)) {
newList.add(accountList);
}
}
accountAdapter.upToDate(newList);
return true;
}
});
然后在你的适配器中添加 upToDate 函数并在上面的代码中调用它。
public void upToDate(List<Customers> newList){
customersList = new ArrayList<>();
customersList.addAll(newList);
notifyDataSetChanged();
}
推荐阅读
- php - 在 WooCommerce 产品循环中显示特定类别的产品属性值
- amazon-web-services - 需要什么转义才能安全地使用 S3 版本 ID 作为文件名?
- python - 我如何在不和谐中 ping 某人
- python - 如何从 python 的列表中删除“”?
- android - 可以在 Google Play 商店之外购买应用内功能吗?
- mysql - ProxySQL 无法访问 RDS 编写器主机
- postgresql - 无法更新 postgresql 中的值
- python - 如何打印列表中的所有子目录?
- php - 如何在 laravel 8 eloquent 中计算价值?
- reactjs - MQTT 消息在 React 中的 Websocket 上打开太多 TCP 连接