2014-01-14 4 views
0

Я написал простую программу java для отображения самого низкого значения. Мой код работает нормально, когда я запускаю Java-приложение. Но, когда я использую тот же код (показать значение в Custom Listview) внутри пользовательского адаптера, расширяющего BaseAdapter. У меня 20 значений. Он возвращает первые 2 правильных значения, а затем показывает неправильное значение. Что я здесь делаю неправильно?Показ неправильного значения в CustomListview

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

show ur adapter – keshav

+0

Вы сказали, что эта функция работает нормально, можете ли вы показать мне ваш адаптер и код, где вы передаете массив адаптеру? –

+0

@keshav обновлен –

ответ

0

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

Смежные вопросы