【问题标题】:How to sort items in a listview by a value of item?如何按项目值对列表视图中的项目进行排序?
【发布时间】:2019-10-27 06:39:38
【问题描述】:

我有一个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"/>

【问题讨论】:

  • 您的列表适配器必须按照您希望它们在列表视图中显示的顺序提供项目。顺便提一句。这些天你真的应该使用 RecyclerView 而不是 ListView。
  • 谢谢@Ridcully。它必须提供,但如何提供?我为什么要使用 RecylerView?

标签: java android sorting listview


【解决方案1】:

您正在寻找这样的东西吗?请注意,它具有按升序或降序排序的选项,利用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);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-06-02
    • 1970-01-01
    • 2013-08-13
    • 1970-01-01
    • 2015-06-27
    • 1970-01-01
    • 2015-06-04
    相关资源
    最近更新 更多