[英]Set specific item always on top recyclerview
我知道如何將新添加的項目放在頂部,但是在這里,我想將特定項目放在頂部,而新項目已經添加了很多次。
在這里我上傳一張照片,您可以在這里找到我想要的。
在該圖中,您可以看到新加入的團隊始終排在最前面,而許多團隊則是通過其他設備加入的。 換句話說,在該圖片中,用戶可以看到自己的團隊始終排在最前面。 而其他用戶已被添加為團隊。
這是我的代碼
public LeaderBoardFragment() {
// Required empty public constructor
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
view = inflater.inflate(R.layout.fragment_leader_board, container, false);
recyclerView = view.findViewById(R.id.leaderboard_recycler);
wp10ProgressBar = view.findViewById(R.id.wp10progressBar);
wp10ProgressBar.showProgressBar();
recyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));
recyclerView.setLayoutManager(new StaggeredGridLayoutManager(1,StaggeredGridLayoutManager.VERTICAL));
// recyclerView.setItemAnimator(itemAnimator);
//// recyclerView.addItemDecoration(dividerItemDecoration);
return view;
}
@RequiresApi(api = Build.VERSION_CODES.KITKAT)
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// itemAnimator = new DefaultItemAnimator();
// itemAnimator.setAddDuration(5000);
// itemAnimator.setRemoveDuration(5000);
getLeaderBoardData();
}
private void getLeaderBoardData() {
Sharedpref sharedpref = Sharedpref.getInstance(getActivity());
queue = Volley.newRequestQueue(Objects.requireNonNull(getActivity()));
intent = Objects.requireNonNull(getActivity()).getIntent();
matchId = sharedpref.getString("matchId");
leaderboardArrayList = new ArrayList<>();
HashMap<String, String> params = new HashMap<>();
params.put("match", matchId);
Log.d(TAG + "112", String.valueOf(params));
String Url = Constants.Base_URL + "leaderboard/";
JsonObjectRequest request = new JsonObjectRequest(Url, new JSONObject(params),
new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
Log.d(TAG, String.valueOf(response));
try {
String statusObject = response.getString("status");
String msgObject = response.getString("msg");
if (statusObject.equals("200")) {
JSONArray jsonArray = response.getJSONArray("response");
for (int i = 0; i < jsonArray.length(); i++) {
JSONObject projResponse = jsonArray.getJSONObject(i);
String rankObject = projResponse.getString("rank");
String killsObject = projResponse.getString("kills");
String myteamObject = projResponse.getString("myteam");
Log.d("response", rankObject);
Log.d("response", killsObject);
Log.d("response", myteamObject);
// Collections.reverse(leaderboardArrayList);
leaderboardArrayList.add(new Leaderboard(rankObject, killsObject, myteamObject));
}
leaderBoardAdapter = new LeaderBoardAdapter(getContext(), leaderboardArrayList);
recyclerView.setAdapter(leaderBoardAdapter);
leaderBoardAdapter.notifyItemInserted(0);
leaderBoardAdapter.notifyDataSetChanged();
// prizeAdapter.setOnItemClickListner(WingsActivity.this);
wp10ProgressBar.hideProgressBar();
}else {
wp10ProgressBar.hideProgressBar();
// shimmerLayout.stopShimmerAnimation();
Toast.makeText(getContext(), msgObject, Toast.LENGTH_SHORT).show();
}
} catch (JSONException e) {
e.printStackTrace();
}
}
}, new Response.ErrorListener() {
@Override
public void onErrorResponse(VolleyError error) {
error.printStackTrace();
}
});
queue.add(request);
}
您需要使用自定義排序器對leaderboardArrayList
進行排序。 這樣,您可以將頂部元素放在頂部(我猜只有一個),而其他元素則按您想要的任何屬性(例如日期,最大數量...)排序。
Collections.sort(leaderboardArrayList, (a, b) -> {
//mustBeOnTop is a custom method that return true if this object is the one you want on top of your list
if(1 == a.user_id) return -1;
if(1 == b.user_id) return 1;
return a.joinedDate.compareTo(b.joinedDate); //compare their "join" date
});
leaderBoardAdapter = new LeaderBoardAdapter(getContext(), leaderboardArrayList);
recyclerView.setAdapter(leaderBoardAdapter); //don't need to call any notification method of the adapter
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.