java - 始终在顶部回收站视图上设置特定项目
问题描述
我知道如何将新添加的项目设置在顶部,但在这里我想将特定项目保留在顶部,而新项目已添加了很多次。
在这里我上传一张图片 你可以在这里找到我想要的。
在那张图片中,您可以看到新加入的团队始终处于领先地位,而许多团队则通过其他设备加入。换句话说,在那张图片中,用户可以看到自己的团队始终处于领先地位。而其他用户已添加团队。
这是我的代码
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
推荐阅读
- linux - 根用户在修改后更改文件的权限
- c# - 我需要将所需的值输出到变量,然后通过条件 C# 检查
- attributes - 属性错误 Nonetype 在地图中没有属性
- php - 最高的数组值
- r - 从 R 中的 tibble 创建时间序列对象以生成 ggseasonplot
- kubernetes - 无法运行 ingress-nginx 设置的强制命令
- javascript - 水平滚动导航,如 facebook 或 instagram - css
- javascript - 使用Javascript将本地.xlsx文件转换为json?
- flutter - 如何在 FLutter 上更改 ThemeData() 中的 ListTile 前导图标颜色
- python - Python:如何在 Y 轴上绘制数字