Android排序Listview,根据用户ID

时间:2016-11-18 12:16:45

标签: android sorting listview

我有一个包含3个不同值的列表视图。

价值观:
热门问题(getField_top_problem),用户ID (getUid)
难度(getField_difficulty)

我想像这样排序清单。

第一部分:
检查登录的用户。获取该用户的所有主要问题。 登录用户的热门问题需要先根据最困难的方式进行排序。

第二部分/其余部分。
需要根据最困难的第一个进行排序。如果来自另一个用户的Top问题没有登录,则无关紧要。(如果不确定,请检查图像 - 红色框)

如果还不清楚,我已经添加了一张图片。看起来应该是这样的。
enter image description here

到目前为止我的进展 我能够排序它,首先为所有用户排序问题,而不仅仅是登录用户。根据登录用户的热门问题,需要对其进行排序。登录用户的ID保存为字符串。

//Example logged in user id (uid)
String uid = "2";

任何帮助都将不胜感激。

 protected void onPostExecute(final List<OcdModel> result) {
        super.onPostExecute(result);
        dialog.dismiss();

        //uid - user id that is logged in.
        //Sort - Top problem of user logged in first.
        //sort the rest according to difficulty

        //check which user is logged in.
        //Boolean user1 = a1.getUid().equals(uid);

        Collections.sort(result, new Comparator<OcdModel>() {
            @Override
            public int compare(OcdModel a1, OcdModel a2) {

                //Top problem first. Arrange row with most difficult first in top problems list.
                Integer tp1 = Integer.parseInt(a1.getField_top_problem().toString());
                Integer tp2 = Integer.parseInt(a2.getField_top_problem().toString());
                int tpComp = tp1.compareTo(tp2);
                //return b1.compareTo(b2);
                if (tpComp != 0) {
                    return tpComp;
                } else {
                    int b1 = Integer.parseInt(a1.getField_difficulty().toString());
                    int b2 = Integer.parseInt(a2.getField_difficulty().toString());
                    return (int) (b1-b2);
                }
            }
        });
        Collections.reverse(result);
        //TODO Need to set data
        OcdListAdapter adapter = new OcdListAdapter(getApplicationContext(), R.layout.row_ocd_list, result);
        lvToolbox.setAdapter(adapter);
    }

提前致谢

1 个答案:

答案 0 :(得分:1)

  

你需要创建像这样的多个竞选者

public class ModelChainedComparator implements Comparator<OcdModel> {
    private List<Comparator<OcdModel>> listComparators;
    @SafeVarargs
    public ModelChainedComparator(Comparator<OcdModel>... comparators) {
        this.listComparators = Arrays.asList(comparators);
    }
    @Override
    public int compare(OcdModel a1, OcdModel a2) {
        for (Comparator<OcdModel> comparator : listComparators) {
            int result = comparator.compare(a1, a2);
            if (result != 0) {
                return result;
            }
        }
        return 0;
    }
}

public class ModelUserLoginComparator implements Comparator<OcdModel> {
    @Override
    public int compare(OcdModel a1, OcdModel a2) {
        return Boolean.valueOf(a2.isUserLogedIn).compareTo(Boolean.valueOf(a1.isUserLogedIn));
    }
}

public class ModelDeficultyComparator implements Comparator<OcdModel> {
    @Override
    public int compare(OcdModel a1, OcdModel a2) {
        int firstObject = Integer.parseInt(a1.getField_difficulty().toString());
        int secondObject = Integer.parseInt(a2.getField_difficulty().toString());
        return firstObject < secondObject ? 1 : (firstObject == secondObject ? 0 : -1);
    }
}

比你必须使用

    ArrayList<OcdModel> list = getList();
    Collections.sort(list, new ModelChainedComparator(
                    new ModelUserLoginComparator(),
                    new ModelDeficultyComparator())
            );

如果不行,请告诉我