gpt4 book ai didi

java - 按日期对 RecyclerView 进行排序

转载 作者:太空宇宙 更新时间:2023-11-04 10:25:38 25 4
gpt4 key购买 nike

我正在尝试按日期对 RecyclerView 进行排序,但我尝试了太多的事情,而且我现在不知道该尝试什么。问题出在 adapter.notifyDataSetChanged(); 行中,因为如果我不放置,则不会显示错误,但也不会更新 recyclerview

这就是我现在所拥有的,并向我显示了该错误。

Unable to start activity ComponentInfo{st.stc/sharetaxi.sharetaxicabdriver.PendingTrajectRecyclerView}: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.support.v7.widget.RecyclerView$Adapter.notifyDataSetChanged()' on a null object reference'

首先,我将所有轨迹放入方法 GetAllTrajects() 中,并在 Collections.sort 中解析 TextView 的日期。

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_pending_traject_recycler_view);

listPendingTraject=new ArrayList<>();
recyclerPendingTraject = (RecyclerView)findViewById(R.id.pendingTrajectRecyclerView);
recyclerPendingTraject.setLayoutManager(new LinearLayoutManager(this));

GetAllTrajects();

Collections.sort(listPendingTraject, new Comparator<PendingTrajectPOJO>() {
@Override
public int compare(PendingTrajectPOJO pendingTrajectPOJO, PendingTrajectPOJO t1) {
String Date = pendingTrajectPOJO.getDate();

String Date1 = t1.getDate();

Date date=null,date1=null;

SimpleDateFormat formatDate = new SimpleDateFormat("dd/MMM/yyyy");
try {
date = formatDate.parse(Date);
date1 = formatDate.parse(Date1);
} catch (ParseException e) {
e.printStackTrace();
}


return date.before(date1) ? 1 : 0;

}
});
adapter.notifyDataSetChanged();
}

在方法 GetAllTrajects 中,当我放入所有信息时,我调用该方法 showPendingTraject()

  private void showPendingTraject() {
listPendingTraject.add(new PendingTrajectPOJO(nameUsers,coordenatesOriginBundle,Origin,Destination,DataIHora,coordenatesDestiBundle,contadorCordenades));

Log.d("ID",""+nomUser);
adapter = new AdapterPendingTraject(listPendingTraject);
recyclerPendingTraject.setAdapter(adapter);


}

最佳答案

一个简单的解决方案是在 PendingTrajectPOJO 存储日期中存储/输入数据(以毫秒为单位),该数据的类型为 long 而不是 String,然后您可以轻松比较 long 值并对其进行排序。

假设您的日期是 28/05/2018,那么您可以使用以下方法以毫秒为单位获取它:

String givenDateString = "28/05/2018"; 
SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
try {
Date mDate = sdf.parse(givenDateString);
long timeInMilliseconds = mDate.getTime();
//store this timeInMilliseconds in your POJO object
System.out.println("Date in milli :: " + timeInMilliseconds);
} catch (ParseException e) {
e.printStackTrace();
}

并使用 timeInMilliseconds 对其进行排序,只是在 RecyclerView 中显示时不要忘记将 timeInMilliseconds 转换为日期。

 Collections.sort(listPendingTraject, new Comparator<PendingTrajectPOJO>() {
@Override
public int compare(PendingTrajectPOJO pendingTrajectPOJO, PendingTrajectPOJO t1) {

long Date = pendingTrajectPOJO.getDate();
long Date1 = t1.getDate();

return Date.compareTo(Date1);
}
});

关于java - 按日期对 RecyclerView 进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50562960/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com