Java 在CustomListview中显示错误的值

Java 在CustomListview中显示错误的值,java,android,android-listview,android-custom-view,Java,Android,Android Listview,Android Custom View,我编写了一个简单的java程序来显示最低值。在运行java应用程序时,我的代码运行良好。但是,当我在扩展BaseAdapter的CustomAdapter内部的CustomListView上使用相同的codeshow值时。我有20个价值观。它返回前2个正确的值,然后显示错误的值。我做错了什么 public class FeedsAdapter extends BaseAdapter { Activity activity; List<UsersFeeds> u

我编写了一个简单的java程序来显示最低值。在运行java应用程序时,我的代码运行良好。但是,当我在扩展BaseAdapter的CustomAdapter内部的CustomListView上使用相同的codeshow值时。我有20个价值观。它返回前2个正确的值,然后显示错误的值。我做错了什么

   public class FeedsAdapter extends BaseAdapter {

    Activity activity;
    List<UsersFeeds> userFeeds;

    public FeedsAdapter(Activity activity,List<UsersFeeds> userFeeds) {
        // TODO Auto-generated constructor stub
        this.activity = activity;
        this.userFeeds = userFeeds;
    }
    @Override
    public int getCount() {
        // TODO Auto-generated method stub
        return userFeeds.size();
    }

    @Override
    public Object getItem(int position) {
        // TODO Auto-generated method stub
        return userFeeds.get(position);
    }

    @Override
    public long getItemId(int position) {
        // TODO Auto-generated method stub
        return userFeeds.indexOf(getItem(position));
    }

    @Override
    public View getView(int position, View view, ViewGroup parent) {
        // TODO Auto-generated method stub
        ViewHolder holder = null;
        LayoutInflater inflater = (LayoutInflater)activity.getSystemService(Activity.LAYOUT_INFLATER_SERVICE);
        if(view == null){
            view = inflater.inflate(R.layout.recent_feeds_custom_listview, null);
            holder = new ViewHolder();
            holder.userName = (TextView)view.findViewById(R.id.userName);
            holder.time = (TextView)view.findViewById(R.id.time);
            view.setTag(holder);
        }else{
            holder = (ViewHolder) view.getTag();
        }
       UsersFeeds data = userFeeds.get(position);
       String name = data.getFirstName()+" "+data.getLastName();
       holder.userName.setText(name);
       /**
        * Time 
        */
        long getTime = Long.parseLong(data.getCheckInTime());
        long time = getTime * (long) 1000;
        Date past = new Date(time);
        Date now = new Date();
        long i1 = TimeUnit.MILLISECONDS.toDays(now.getTime() - past.getTime());
        long i2 = TimeUnit.MILLISECONDS.toMinutes(now.getTime()
                                - past.getTime());
        ong i3 = TimeUnit.MILLISECONDS.toHours(now.getTime() - past.getTime());
        String day = i1 + " days ago";
        String sec = i2 + " minutes ago";
        String hours = i3 + " hours ago";
        long[] values = new long[] { i1, i2, i3 };
        Arrays.sort(values);
        String postfix ="";
        for (int i11 = 0; i11 < values.length; i11++) {
                if (values[i11] != 0) {
                    postfix = values[i11] == i11 ? day : (values[i11] == i2 ? sec
                            : hours);
                     holder.time.setText(postfix);
                }
            }


        return view;
    }

    private class ViewHolder{
      TextView userName;
        TextView time;
    }

我想我知道怎么了。您应该在调用getView之前检查时差,将其放入数组中,对该数组进行排序,然后将该数组放入getView中。或者您应该在调用getView之前对UserFeed进行排序。现在,它只是将时间差放在listView中

你说这个函数工作得很好,你能给我看看你的适配器和你给适配器数组的代码吗?@KevinvanMierlo我更新了question20的值在这种情况下意味着20个用户输入?是否有任何与您预期相反的失败案例?