如何在Android中的Recycleview上正确实现搜索过滤器

时间:2019-03-08 10:16:28

标签: java android mysql

我已经从mysql数据库中成功填充了我的recycleview,并且我想在其上实现搜索过滤器。我看到了一些示例并尝试实现它。我知道我已经接近了,但是无法正常工作。

我当前的进展是,当我尝试搜索某些内容时,整个回收视图变成空白,之后没有任何反应。

这是我的Java代码:

MainActivity.java

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

    getHotelDetails();

    mylearningAdapters1 = new ArrayList<>();
    recyclerView = (RecyclerView) findViewById(R.id.reviews_list);
    recyclerView.setHasFixedSize(true);
    recyclerViewlayoutManager = new LinearLayoutManager(this, LinearLayoutManager.VERTICAL, false);
    recyclerView.setLayoutManager(recyclerViewlayoutManager);

    inputSearch = (EditText)findViewById(R.id.searchBar);
    inputSearch.addTextChangedListener(new TextWatcher() {
        @Override
        public void onTextChanged(CharSequence s, int start, int before, int count) {

            // TODO Auto-generated method stub
        }

        @Override
        public void beforeTextChanged(CharSequence s, int start, int count, int after) {

            // TODO Auto-generated method stub
        }

        @Override
        public void afterTextChanged(Editable s) {

            // filter your list from your input
            filter(s.toString());
            //you can use runnable postDelayed like 500 ms to delay search text
        }
    });

}
void filter(String text){
    List<MyHotelReviewAdapter> temp = new ArrayList();
    for(MyHotelReviewAdapter d: mylearningAdapters){
        //or use .equal(text) with you want equal match
        //use .toLowerCase() for better matches
        if(d.getHotel_user().contains(text)){
            temp.add(d);
        }
    }
    //update recyclerview
   RecyclerViewMyHotelReviewAdapter rc = new RecyclerViewMyHotelReviewAdapter(mylearningAdapters);
   rc.updateList(temp);
}

这是我的Recycleview适配器类代码: RecyclerViewMyHotelReviewAdapter.java

public class RecyclerViewMyHotelReviewAdapter extends RecyclerView.Adapter<RecyclerViewMyHotelReviewAdapter.LearningHolder> {

static Context context;
public static List<MyHotelReviewAdapter> mylearningAdapters;

public RecyclerViewMyHotelReviewAdapter(List<MyHotelReviewAdapter> mylearningAdapters, Context context){
    super();
    this.mylearningAdapters = mylearningAdapters;
    this.context = context;
}

public RecyclerViewMyHotelReviewAdapter(List<MyHotelReviewAdapter> mylearningAdapters) {
}

@Override
public RecyclerViewMyHotelReviewAdapter.LearningHolder onCreateViewHolder(ViewGroup parent, int viewType) {

    View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.show_hotel_details, parent, false);
    LearningHolder learningHolder = new LearningHolder(view);

    //RecyclerViewModuleAdapter.ModuleHolder moduleHolder = new RecyclerViewModuleAdapter.ModuleHolder(view);
    return learningHolder;

}

@SuppressLint("NewApi")
@Override
public void onBindViewHolder(RecyclerViewMyHotelReviewAdapter.LearningHolder holder, int position) {
   final MyHotelReviewAdapter mylearningAdapter1 = mylearningAdapters.get(position);

    int t = 4;
    String a = mylearningAdapter1.getHotel_People();
    int c = t + Integer.parseInt(a);
    //Toast.makeText(context, ""+c, Toast.LENGTH_SHORT).show();

    holder.hotel_user.setText(mylearningAdapter1.getHotel_user());
    holder.hotel_dateIn.setText(mylearningAdapter1.getHotel_CheckIn());
    holder.hotel_dateOut.setText(mylearningAdapter1.getHotel_CheckOut());
    holder.total.setText(String.valueOf("Guests: "+c));
    holder.htlName.setText(mylearningAdapter1.getHotel_name());
    holder.id.setText(mylearningAdapter1.getHotel_id());
    //holder.english_d.setText(mylearningAdapter1.getEnglish());
}

public void updateList(List<MyHotelReviewAdapter> list){
    mylearningAdapters = list;
    notifyDataSetChanged();
}

@Override
public int getItemCount() {
    return mylearningAdapters.size();
}

public class LearningHolder extends RecyclerView.ViewHolder {

    String deleteBooking = "http://site2test.in/OxygenClub/mobileapp/delete_booking_careTaker.php";
    AppCompatTextView hotel_user, hotel_dateIn, hotel_dateOut, htlName, total, id;
    Button checkIn, checkOut;

    public LearningHolder(View itemView) {
        super(itemView);
        hotel_user     = (AppCompatTextView)itemView.findViewById(R.id.name);
        hotel_dateIn   = (AppCompatTextView)itemView.findViewById(R.id.checkin);
        hotel_dateOut  = (AppCompatTextView)itemView.findViewById(R.id.checkout);
        htlName        = (AppCompatTextView)itemView.findViewById(R.id.hotelName);
        total          = (AppCompatTextView)itemView.findViewById(R.id.totalPeople);
        id             = (AppCompatTextView)itemView.findViewById(R.id.hotelId);

       }
    }
 }...

我的DataHolder类。

public class MyHotelReviewAdapter {

public String Hotel_People;
public String Hotel_CheckIn;
public String Hotel_CheckOut;
public String Hotel_User;
public String Hotel_Name;
public String Hotel_Id;

public String getHotel_CheckIn() {
    return this.Hotel_CheckIn;
}

public void setHotel_CheckIn(String hotel_checkIn) {
    this.Hotel_CheckIn = hotel_checkIn;
}

public String getHotel_CheckOut() {
    return this.Hotel_CheckOut;
}

public void setHotel_CheckOut(String hotel_checkOut) {
    this.Hotel_CheckOut = hotel_checkOut;
}

public String getHotel_People() {
    return this.Hotel_People;
}

public void setHotel_People(String hotel_people) {
    this.Hotel_People = hotel_people;
}

public String getHotel_user() {
    return this.Hotel_User;
}

public void setHotel_user(String hotel_user) {
    this.Hotel_User = hotel_user;
}
public String getHotel_name(){
    return this.Hotel_Name;
}
public void setHotel_name(String hotel_name){
    this.Hotel_Name = hotel_name;
}

public String getHotel_id(){
    return this.Hotel_Id;
}
public void setHotel_id(String hotel_id){
    this.Hotel_Id = hotel_id;
}
}

我想按Hotel_user搜索我的数据。我已经在过滤器函数中编码了getHotel_user的值。

0 个答案:

没有答案