簡體   English   中英

始終將特定項目設置在recyclerview頂部

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM