Отображение неверного значения в 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.