Отображение неверного значения в CustomListview

Я написал простую программу Java, чтобы показать самое низкое значение. Мой код работает нормально, когда я запускаю Java-приложение. Но, когда я использую тот же код (показывать значение в Custom Listview) внутри CustomAdapter, который расширяет BaseAdapter. У меня 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;
    }

1 ответ

Я думаю, я знаю, что не так. Вы должны или проверьте разницу во времени перед звонком getView(), поместить его в массив, отсортировать этот массив и поместить этот массив в getView(), Или вы должны отсортировать пользовательские каналы перед вызовом getView(), Теперь он просто помещает разницу во времени в listView.

Другие вопросы по тегам