让 FirebaseRecyclerAdapter 在条件下获取数据而不是所有条件 [英] Make FirebaseRecyclerAdapter get data under conditions and not all of them
问题描述
我需要以某种方式调整 FirebaseRecyclerAdapter 以便从我的数据库中获取一些数据,而不是所有数据.有什么方法可以实现吗?我的最终目标是在屏幕上随机显示 10 个条目!这是我的尝试和结果:
I need to adjust somehow the FirebaseRecyclerAdapter in order to get some data from my database and not all of them. Is there any way to achieve that? My end goal is to show 10 random entries on the screen! Here is what I tried and the results:
FirebaseRecyclerAdapter<Houses, HousesViewHolder> mHousesRecyclerAdapter = new FirebaseRecyclerAdapter<Houses, HousesViewHolder>(
Houses.class,
R.layout.house_single,
HousesViewHolder.class,
mDatabaseHouses
) {
@Override
protected void populateViewHolder(HousesViewHolder viewHolder, Houses house, int position) {
if (Integer.parseInt(house.getPrice()) > 200) {
viewHolder.setHouseName(house.getHouse_name());
viewHolder.setCity(house.getCity());
viewHolder.setImage(house.getMainFoto(), getApplicationContext());
viewHolder.setPrice(house.getPrice());
}
}
};
mRecyclerView.setAdapter(mHousesRecyclerAdapter);
带有 google 标志的条目是价格小于等于的房子.200 是这个例子中的房子,我根本不会出现它们.
The entries with the google logo are the houses that have price < 200 and are the houses in this example that I do not them to be appeared at all.
单屋 XML:
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<ImageView
android:id="@+id/single_house_image"
android:layout_width="120dp"
android:layout_height="120dp"
android:layout_marginLeft="8dp"
android:layout_marginTop="0dp"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:srcCompat="@drawable/common_google_signin_btn_icon_dark_normal" />
<TextView
android:id="@+id/single_house_name_tv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="16dp"
android:layout_marginTop="24dp"
android:text="House Name"
android:textColor="@android:color/black"
android:textSize="18sp"
app:layout_constraintLeft_toRightOf="@+id/single_house_image"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:id="@+id/single_house_location_tv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="16dp"
android:layout_marginTop="8dp"
android:text="House Location "
android:textSize="14sp"
app:layout_constraintLeft_toRightOf="@+id/single_house_image"
app:layout_constraintTop_toBottomOf="@+id/single_house_name_tv" />
<TextView
android:id="@+id/single_house_price"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="16dp"
android:layout_marginTop="6dp"
android:text="Price"
android:textSize="14sp"
app:layout_constraintLeft_toRightOf="@+id/single_house_image"
app:layout_constraintTop_toBottomOf="@+id/single_house_location_tv" />
</android.support.constraint.ConstraintLayout>
推荐答案
您可以使用 ListView 代替这个 firebaserecycler.检查一个例子:
You can use a ListView instead of this firebaserecycler. Check an example:
List<YourObject> mylist = new ArrayList<YourObject>();
database.child("houses").addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for (DataSnapshot postSnapshot: dataSnapshot.getChildren()) {
//Filter your data
String name = postSnapshot.child("name").getValue().toString();
if(name.equals("test") {
YourObject myObject = new YourObject(name);
mylist.add(myObject);
}
}
updatelist();
}
@Override
public void onCancelled(DatabaseError databaseError2) {
}
});
更新您的列表视图
void updatelist() {
ListView yourListView = (ListView) findViewById(R.id.myListView);
// get data from the table by the HousesAdapter
YourAdapter customAdapter = new YourAdapter(YourClass.this, R.layout.adapter_layout, mylist);
yourListView.setAdapter(customAdapter);
}
一个适配器示例:
public class YourAdapter extends ArrayAdapter<YourObject> {
Context context;
public YourAdapter(Context context, int resource, List<Houses> items) {
super(context, resource, items);
this.context = context;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View v = convertView;
YourObject yourObject = getItem(position);
if (v == null) {
LayoutInflater vi;
vi = LayoutInflater.from(getContext());
v = vi.inflate(R.layout.adapter_layout, null);
}
TextView mytextview = (TextView) v.findViewById(R.id.mytextview);
mytextview.setText(yourObject.getName());
return v;
}
}
YourObject 类
YourObject class
public class YourObject {
private String name;
public YourObject(String name) {
this.name = name;
}
public String getName() {
return this.name;
}
}
布局
<ListView
android:id="@+id/myListView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fillViewport="true">
</ListView>
这篇关于让 FirebaseRecyclerAdapter 在条件下获取数据而不是所有条件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!