如何在片段中过滤RecyclerView数据

时间:2019-03-26 09:45:20

标签: android firebase firebase-realtime-database

我不知道如何从Fragment中显示的RecyclerView中过滤结果。 如果可能的话,我想将其中一些代码合并到一个java文件中。

我已经在Google上搜索了一些示例,但大多数示例是在Activity中实现的。

current output

我的片段代码:

public class SearchFragment extends Fragment {
private RecyclerView recyclerView;
private AdvertiseAdapter advertiseAdapter;
private List<Advertise> advertiseList;

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.fragment_search,container,false);

    recyclerView = view.findViewById(R.id.searchResult_view);
        new DatabaseHelper().readProperty(new DatabaseHelper.DataStatus() {
        @Override
        public void DataIsLoaded(List<Advertise> advertiseList, List<String> keys) {
            new RecyclerViewConfig().setConfig(recyclerView,getContext(),advertiseList,keys);
        }
    });

    return view;
}

我的数据库助手

public class DatabaseHelper {
private FirebaseDatabase firebaseDatabase;
private DatabaseReference reference;
private List<Advertise> property = new ArrayList<>();

public interface DataStatus{
    void DataIsLoaded(List<Advertise> ads,List<String> keys);
}

public DatabaseHelper() {
    firebaseDatabase = FirebaseDatabase.getInstance();
    reference = firebaseDatabase.getReference("Property");
}

public void readProperty(final DataStatus dataStatus){
    reference.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
            property.clear();
            List<String> propertyKeys = new ArrayList<>();
            for (DataSnapshot userSnapshot : dataSnapshot.getChildren()){
                for (DataSnapshot propertySnapshot : userSnapshot.getChildren()){
                    propertyKeys.add(propertySnapshot.getKey());
                    Advertise advertise = propertySnapshot.getValue(Advertise.class);
                    property.add(advertise);
                }
            }
            dataStatus.DataIsLoaded(property,propertyKeys);
        }

        @Override
        public void onCancelled(@NonNull DatabaseError databaseError) {

        }
    });

}

我的RecyclerViewConfig代码:

public class RecyclerViewConfig {
private Context mContext;
private PropertyAdapter propertyAdapter;
public void setConfig(RecyclerView recyclerView, Context context, List<Advertise> advertiseList, List<String> keys){
    mContext = context;
    propertyAdapter = new PropertyAdapter(advertiseList,keys);
    recyclerView.setLayoutManager(new LinearLayoutManager(context));
    recyclerView.setAdapter(propertyAdapter);
}


class PropertyItemView extends RecyclerView.ViewHolder{
    //private ImageView PropertyImage;
    private TextView PropertyName;
    private TextView PropertyPostal;
    private TextView PropertyState;
    private TextView PropertyDetail;

    private String key;

    public PropertyItemView(ViewGroup parent){
        super(LayoutInflater.from(mContext)
                .inflate(R.layout.search_view,parent,false));

        //PropertyImage = itemView.findViewById(R.id.advertiseImage);
        PropertyName = itemView.findViewById(R.id.advertiseName);
        PropertyState = itemView.findViewById(R.id.advertiseState);
        PropertyPostal = itemView.findViewById(R.id.advertisePostal);
        PropertyDetail = itemView.findViewById(R.id.advertiseDetail);

    }

    public void bind(Advertise advertise,String key){

        //PropertyImage.setImageDrawable(advertise.getProperty_imageUrl());
        PropertyName.setText(advertise.getName());
        PropertyState.setText(advertise.getState());
        PropertyPostal.setText(advertise.getPostal());
        PropertyDetail.setText(advertise.getDetail());
        this.key = key;
    }
}

class PropertyAdapter extends RecyclerView.Adapter<PropertyItemView>{
    private List<Advertise> advertiseList;
    private List<String> mkeys;

    public PropertyAdapter(List<Advertise> advertiseList, List<String> mkeys) {
        this.advertiseList = advertiseList;
        this.mkeys = mkeys;
    }

    @NonNull
    @Override
    public PropertyItemView onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        return new PropertyItemView(parent);
    }

    @Override
    public void onBindViewHolder(@NonNull PropertyItemView holder, int position) {
        holder.bind(advertiseList.get(position),mkeys.get(position));

        final Advertise ads = advertiseList.get(position);
        holder.itemView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent redirect = new Intent(mContext,PropertyActivity.class);
                redirect.putExtra("propertyID", ads.getPropertyID());
                mContext.startActivity(redirect);
            }
        });
    }

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

    public void updateList(List<String> newList){
        mkeys = new ArrayList<>();
        mkeys.addAll(newList);
        notifyDataSetChanged();

    }
}

0 个答案:

没有答案