如何根据item的值对列表视图中的项进行排序



我有一个ListView,我想根据这些项的特定数据库值对项进行排序。该值也将在项目中。它不会是一次性的排序。我的意思是,每次创建活动时,它都会进行排序。我正在使用适配器。

我已经检查了每一个类似的问题,但我找不到合适的解决方案。

有办法做到吗?事先非常感谢。

这是排序值的Firebase数据库参考:

mLobbyDatabaseRef = mLobbyDatabase.getReference().child("usersDatabase/" + uid + "/" + "lobbyDatabase/" + otherUid + "/");
DatabaseReference mLobbyDatabaseKeyRef = mLobbyDatabaseRef.child("lobbyKey");
mLobbyDatabaseKeyRef.setValue(itemKey);

itemKey将是要使用排序的值。它也可以从项目中访问。

<TextView
android:id="@+id/lobby_key_textview"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentStart="true"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:text=""
android:textColor="@android:color/transparent"
android:textSize="8sp"/>

你想要这样的东西吗?请注意,它具有按升序或降序排序的选项,利用了Collections类和setAdapter()方法。

private ListView lv;
private static ArrayList<String> itemKey = new ArrayList<>();
private void sortData(boolean asc)
{
if (asc)
Collections.sort(itemKey);
else
Collections.reverse(itemKey);
lv.setAdapter(new ArrayAdapter(MainActivity.this, android.R.layout.simple_list_item_1, itemKey));
}

如果Collections类和ArrayList不起作用,并且您引用的是像FirebaseListAdapter这样的适配器,那么尝试这样的方法,使用orderByChild()方法按升序排序:

private ListView lv;
Query queryRef = mLobbyDatabaseRef.orderByChild("itemKey");
FirebaseListAdapter<Your_DB_Name> firebaseListAdapter = new FirebaseListAdapter<Your_DB_Name>(this, Your_DB_Name.class, android.R.layout.simple_list_item_1, queryRef) 
{
@Override
protected void populateView(View lobby_key_textview, Your_DB_Name model, int position)
{ 
String itemKey = String.valueOf(model.getItemKey());
((TextView)lobby_key_textview.findViewById(android.R.id.text1)).setText(itemKey);
}
};
lv.setAdapter(firebaseListAdapter);

最新更新