【问题标题】:Sorting my listview排序我的列表视图
【发布时间】:2018-04-11 12:28:33
【问题描述】:

我想根据“时间”对以下列表视图进行排序。有什么办法可以在下面的代码上做到这一点?因此,例如 19:15 出现在 20:30 以上等...

我会非常感谢任何形式的帮助!

@Override
public void onDataChange(DataSnapshot dataSnapshot) {
    List<String> listTime = new ArrayList<String>();
    Collections.sort(listTime);
    final List<String> idsList = new ArrayList<>();
    ArrayAdapter adapter = new ArrayAdapter<String>(getApplicationContext(), android.R.layout.simple_list_item_1, listTime);
    final ListView Time = (ListView) findViewById(R.id.Listtime);

    for (final DataSnapshot ds : dataSnapshot.getChildren()) {
        String user = ds.child("UserName").getValue(String.class);
        String arrival = ds.child("Arrival").getValue(String.class);
        String departure = ds.child("Departure").getValue(String.class);
        String time = ds.child("Time").getValue(String.class);
        String TripID = ds.child("TripID").getValue(String.class);
        idsList.add(TripID);
        String Trips = TextUtils.join("  |  ", new String[]{time, user,  departure, arrival});
        listTime.add(Trips);
        Time.setAdapter(adapter);
        Time.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
                Intent intent = new Intent(AvailableRides.this,RideSelected.class);
                String entry = (String) adapterView.getItemAtPosition(i);
                TextView textView4 = findViewById(R.id.textView30);
                String user = textView4.getText().toString();
                String TripID = idsList.get(i);
                intent.putExtra(EXTRA_MESSAGE10,user);
                intent.putExtra(EXTRA_MESSAGE8, entry);
                intent.putExtra(EXTRA_MESSAGE9, TripID);
                startActivity(intent);
            }
        });
    }
}

【问题讨论】:

  • 您必须以 Date 格式而不是 String 保存日期。然后 Collections.sort 将对日期进行排序。
  • 这是否意味着我只需将“字符串时间”更改为“日期时间”?

标签: android sorting listview


【解决方案1】:

首先,我建议为所有这些信息创建一个包装类,例如Trip

public class Trip {
  private String username;
  private Date arrival;
  private String departure;
  private Date time;
  private String tripId;

  // create getter + setter

  // you also can overwrite toString to get all information
}

对于日期/时间比较,您必须将字符串转换为 Date 对象。

现在你有两个选择:

  1. 在新创建的包装类中实现可比较:

    public class Trip implements Comparable<Trip> {
    

    并实现方法:

    public int compareTo(Trip trip) {
        // care maybe nullpointer can occure here -> check it brefore
        return time.compareTo(trip.getTime());
    }
    
  2. 创建一个比较器。然后你必须改变排序调用,如:

    Collections.sort(listTime, yourComparator);
    

    并创建比较器:

    public class TripComparator implements Comparator<Trip> {
        public int compare(Trip trip1, Trip trip2) {
            // care maybe nullpointer can occure here -> check it before
            return trip1.getTime().compareTo(trip2.getTime());
        }
    }
    

您也可以在包装类中实现 Parcelable。然后你可以将此对象传递给另一个活动或其他任何东西。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多