iT邦幫忙

0

Android 使用 Collections.sort 去比對距離遠近的問題

Android 使用 Collections.sort 去比對距離遠近的問題

目前是已經計算出使用者的定位到每一個點的距離

但是要如何才可以用 Collections.sort 去比對

然後 Recyclerview 從近到遠顯示呢??

DatabaseReference reference = FirebaseDatabase.getInstance().getReference("Campsite");
        Query query = reference.orderByChild("country").equalTo(country);
        query.addListenerForSingleValueEvent(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                progressDialog.dismiss();
                if(seatch_bar.getText().toString().equals("")){
                    camperSiteModel.clear();
                    for(DataSnapshot snapshot : dataSnapshot.getChildren()){
                        CamperSiteModel camperSiteModel1 = snapshot.getValue(CamperSiteModel.class);

                        double radLat1 = rad(camperSiteModel1.getCamperSiteLatitude());
                        double radLat2 = rad(latitude);
                        double a = radLat1 - radLat2;
                        double b = rad(camperSiteModel1.getCamperSiteLongitude()) - rad(longitude);
                        double s = 2 * Math.asin(Math.sqrt(Math.pow(Math.sin(a / 2), 2)
                                + Math.cos(radLat1) * Math.cos(radLat2)
                                * Math.pow(Math.sin(b / 2), 2)));
                        s = s * EARTH_RADIUS;
                        s = Math.round(s * 10000) / 10000;
                        //Log.i("到每一點的距離",Math.ceil(s)+""); 

                        camperSiteModel1.setDistance(Math.ceil(s));
                        camperSiteModel.add(camperSiteModel1);

                    }
                    camperSiteAdapter.notifyDataSetChanged();
                }
            }

            @Override
            public void onCancelled(@NonNull DatabaseError error) {

            }
        });

s 是到每一個的距離有多遠

那我的 Collections.sort 要如何比對??

圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 個回答

0
海綿寶寶
iT邦大神 1 級 ‧ 2021-10-06 21:54:50

參考這篇的例子三

將原本的

...
camperSiteAdapter.notifyDataSetChanged();
...

加一列變成

...
Collections.sort(camperSiteModel, new CamperSiteSort());
camperSiteAdapter.notifyDataSetChanged();
...

另外要定義 ComperSiteSort 如下

class CamperSiteSort implements Comparator<CamperSiteModel> 
{ 
	//以 CamperSiteModel 的 distance 升序排列
	public int compare(CamperSiteModel a, CamperSiteModel b) 
	{ 
		return a.distance - b.distance; 
	} 
} 
ping1000 iT邦新手 5 級 ‧ 2021-10-06 21:59:21 檢舉

那篇我參考過了~ 我比較不懂的是 我要怎麼去更新 adapter & Collections.sort 要放哪裡的問題

Collections.sort 已加在上面
如果你的 camperSiteAdapter 有寫對的話
應該就可以了

我要發表回答

立即登入回答