【问题标题】:Android sorting ascending custom adapter by distanceAndroid按距离排序升序自定义适配器
【发布时间】:2017-01-07 00:18:16
【问题描述】:

在我的应用程序中,我有一个带有自定义项目列表的列表,该列表显示在后台使用适配器加载的不同项目 我正在尝试使用此代码以升序方式(使用距离值)对适配器的元素进行排序。进入 onCretaeView:

cardViewList = new ArrayList<>();
    View vw=inflater.inflate(R.layout.jsonparse_fragment, container, false);
    lv=(ListView) vw.findViewById(R.id.listView1);
    lv.setDivider(null);
    lv.setDividerHeight(0);

    final Double lat = gpsTracker.getLatitude();
    Double LatitudineUber = lat;
    Double lon = gpsTracker.getLongitude();
    Double LongitudineUber = lon;





    cardViewList.clear();

    if (flag_above35==1 && flag_below35==0 && flag_hybrid==0 && flag_position==0 && flag_tempo==0 && flag_conducente == 0)
    {
        car2go_flag=1;
        new JSONAsynTask().execute("https://www.car2go.com/api/v2.1/vehicles?loc="+nome_citta+"&oauth_consumer_key=roadzapp&format=json");
    }
    else if (flag_above35==0 && flag_below35==1 && flag_hybrid==0 && flag_position==0 && flag_tempo==0 && flag_conducente == 0)
    {
        car2go_flag=2;
        new JSONAsynTask().execute("https://www.car2go.com/api/v2.1/vehicles?loc="+nome_citta+"&oauth_consumer_key=roadzapp&format=json");
    }
    else if (flag_above35==1 && flag_below35==0 && flag_hybrid==1 && flag_position==0 && flag_tempo==0 && flag_conducente == 0)
    {
        car2go_flag=3;
        new JSONAsynTask().execute("https://www.car2go.com/api/v2.1/vehicles?loc="+nome_citta+"&oauth_consumer_key=roadzapp&format=json");
    }
    else if (flag_above35==0 && flag_below35==1 && flag_hybrid==1 && flag_position==0 && flag_tempo==0 && flag_conducente == 0)
    {
        car2go_flag=4;
        new JSONAsynTask().execute("https://www.car2go.com/api/v2.1/vehicles?loc="+nome_citta+"&oauth_consumer_key=roadzapp&format=json");
    }
    else if (flag_above35==0 && flag_below35==0 && flag_hybrid==1 && flag_position==0 && flag_tempo==0 && flag_conducente == 0)
    {
        car2go_flag=5;
        new JSONAsynTask().execute("https://www.car2go.com/api/v2.1/vehicles?loc="+nome_citta+"&oauth_consumer_key=roadzapp&format=json");
    }
    else if (flag_above35==0 && flag_below35==0 && flag_hybrid==0 && flag_position==0 && flag_tempo==0 && flag_conducente == 0)
    {
        car2go_flag=0;
        new JSONAsynTask().execute("https://www.car2go.com/api/v2.1/vehicles?loc="+nome_citta+"&oauth_consumer_key=roadzapp&format=json");
        if (flag_uber==1) {
            uber_flag=0;
            new JSONAsynTask1(getContext().getApplicationContext()).execute();
        }
        if (flag_jcd==1) {
            jcd_flag=0;
            //new JSONAsynTask2().execute();
            new JSONAsynTask3().execute();
        }
        if (flag_bitaksi==1) {
            bitaksi_flag=0;
            new JSONAsynTask4(getContext().getApplicationContext()).execute();
        }
        if (flag_lyft==1) {
            lyft_flag = 0;
            new JSONAsynTask5().execute();
        }
    }
    else if (flag_above35==0 && flag_below35==0 && flag_hybrid==0 && flag_position==1 && flag_tempo==0 && flag_conducente == 0)
    {
        car2go_flag=6;
        new JSONAsynTask().execute("https://www.car2go.com/api/v2.1/vehicles?loc="+nome_citta+"&oauth_consumer_key=roadzapp&format=json");
        if (flag_uber==1) {
            uber_flag=1;
            new JSONAsynTask1(getContext().getApplicationContext()).execute();
        }
        if (flag_jcd==1) {
            jcd_flag=1;
            //new JSONAsynTask2().execute();
            new JSONAsynTask3().execute();
        }
        if (flag_bitaksi==1) {
            bitaksi_flag=1;
            new JSONAsynTask4(getContext().getApplicationContext()).execute();
        }
        if (flag_lyft==1) {
            lyft_flag=1;
            new JSONAsynTask5().execute();
        }
    }
    else if (flag_above35==0 && flag_below35==0 && flag_hybrid==0 && flag_position==0 && flag_tempo==1 && flag_conducente == 0)
    {
        car2go_flag=7;
        new JSONAsynTask().execute("https://www.car2go.com/api/v2.1/vehicles?loc="+nome_citta+"&oauth_consumer_key=roadzapp&format=json");
        if (flag_uber==1) {
            uber_flag=2;
            new JSONAsynTask1(getContext().getApplicationContext()).execute();
        }
        if (flag_bitaksi==1) {
            bitaksi_flag=2;
            new JSONAsynTask4(getContext().getApplicationContext()).execute();
        }
        if (flag_lyft==1) {
            lyft_flag=2;
            new JSONAsynTask5().execute();
        }
    }
    else if (flag_above35==0 && flag_below35==0 && flag_hybrid==0 && flag_position==0 && flag_tempo==0 && flag_conducente == 1)
    {
        //car2go_flag=8;
        //new JSONAsynTask().execute("https://www.car2go.com/api/v2.1/vehicles?loc="+nome_citta+"&oauth_consumer_key=roadzapp&format=json");
        if (flag_uber==1) {
            uber_flag=1;
            new JSONAsynTask1(getContext().getApplicationContext()).execute();
        }
        if (flag_bitaksi==1) {
            bitaksi_flag=1;
            new JSONAsynTask4(getContext().getApplicationContext()).execute();
        }
        if (flag_lyft==1) {
            lyft_flag=1;
            new JSONAsynTask5().execute();
        }
    }

    adapter = new CardViewAdapter(getActivity(), R.layout.new_item_list, cardViewList);
    Collections.sort(cardViewList, new Comparator<CardView>() {
        @Override
        public int compare(CardView lhs, CardView rhs) {
            Double d1 = Double.parseDouble(lhs.getDistance()) / 1000.0;
            Double d2 = Double.parseDouble(rhs.getDistance()) / 1000.0;
            if (d1 == d2) {
                return 0;
            }
            if (d1 > d2) {
                return 1;
            }
            return -1;
        }
    });


    lv.setAdapter(adapter);

但排序不起作用。 我的代码错了? 有什么帮助吗?

【问题讨论】:

  • 你的代码真的很乱。没有冒犯,只是一些建设性的批评。我相信你可以在没有那么多 if-else 和 asynchtask 创建的情况下做得更好。此外,您的问题本质上就是第一个答案所说的:您需要等待数据运行排序。 ALSO: 不要在 compare 方法中做解析,这样效率很低。

标签: android sorting adapter


【解决方案1】:

您的 cardviewlist 正在被 AsyncTask 填充,因此对 Collections.sort 的调用发生在列表填充之前,因此没有任何内容需要排序。后来,当 AsyncTask 填满列表时,它们没有排序。

【讨论】:

    猜你喜欢
    • 2018-02-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-11
    • 1970-01-01
    • 2015-10-14
    相关资源
    最近更新 更多