在列表视图中滚动后,元素被交换

丹尼斯·辛科夫斯基(Dennis Zinkovski)

我编写时间跟踪应用程序,listview的每一行都有两个按钮(“开始”和“停止”)和一些textView来显示经过的时间。

在列表视图中滚动后,将交换元素。

我不确定我的解决方案,但我放入模型类ViewHolder对象,以获取更改视图元素的权限。

这是代码模型的片段

private String name;
private  Boolean isStart=false;
private  Long elapsedTime=0L,seconds=0L,hours=0L,minutes=0L,lastPause=0L,updateTime=0L,startTime=0L,days=0L;
private Runnable updateTimeThread=new Runnable() {
@Override
public void run() {
    if(isStart && startTime!=0) {
        updateTime = ((System.currentTimeMillis() - startTime) + lastPause);
        seconds = updateTime / 1000;
        minutes = seconds / 60;
        hours = minutes / 60;

        seconds = seconds % 60;
        minutes = minutes % 60;
        hours = hours % 24;

        holder.days.setText(String.format("%04d", days));
        holder.hours.setText(String.format("%02d", hours));
        holder.minutes.setText(String.format("%02d", minutes));
        holder.seconds.setText(String.format("%02d", seconds));
        Log.d("myTag",name+" "+seconds);
        MainActivity.handler.post(this);
    }
}
             };

MyAdapter.ViewHolder holder;

    public MyAdapter.ViewHolder getHolder() {
return holder;
  }

   public void setHolder(MyAdapter.ViewHolder holder) {
    this.holder = holder;
   }

     public Runnable getRunnable() {
return updateTimeThread;
         }

适配器的片段代码

public View getView(final int position, final View convertView, ViewGroup parent) {
View row = convertView;
final Tracker tracker = trackerList.get(position);
final Runnable updateTimeThread=tracker.getRunnable();


View.OnClickListener onClickListener;
ViewHolder holder;

if(row == null){
    holder = new ViewHolder();
    LayoutInflater inflater = ((Activity)context).getLayoutInflater();
    row = inflater.inflate(R.layout.row,parent,false);
    holder.name = (TextView)row.findViewById(R.id.tvName);
    holder.days = (TextView)row.findViewById(R.id.tvDays);
    holder.hours = (TextView)row.findViewById(R.id.tvHours);
    holder.minutes = (TextView)row.findViewById(R.id.tvMinutes);
    holder.seconds = (TextView)row.findViewById(R.id.tvSeconds);
    holder.start = (Button)row.findViewById(R.id.btStart);
    holder.stop = (Button)row.findViewById(R.id.btStop);
    row.setTag(holder);
}else {
    holder = (ViewHolder) row.getTag();
}
    holder.start.setEnabled(true);
    holder.stop.setEnabled(false);
    holder.name.setText(tracker.getName());
    final ViewHolder finalHolder = holder;



if(tracker.getIsStart()){
    holder.start.setEnabled(false);
    holder.stop.setEnabled(true);
}


 onClickListener = new View.OnClickListener() {
     @Override
     public void onClick(View v) {
         switch (v.getId()) {
             case R.id.btStart:
                 tracker.setStartTime(System.currentTimeMillis());
                 tracker.setIsStart(true);
                 tracker.setHolder(finalHolder);
                 MainActivity.handler.post(updateTimeThread);
                 finalHolder.start.setEnabled(false);
                 finalHolder.stop.setEnabled(true);
                 break;
             case R.id.btStop:
                 tracker.setLastPause(tracker.getUpdateTime());
                 MainActivity.handler.removeCallbacks(updateTimeThread);
                 finalHolder.stop.setEnabled(false);
                 finalHolder.start.setEnabled(true);
                 tracker.setIsStart(false);
                 break;
         }
     }
 };
holder.start.setOnClickListener(onClickListener);
holder.stop.setOnClickListener(onClickListener);
return row;
 }

static class ViewHolder{
TextView  name,days,hours,minutes,seconds;
Button start,stop;
}
丹尼斯·辛科夫斯基(Dennis Zinkovski)

我只是将这两种方法添加到我的适配器中)

  @Override
public int getViewTypeCount() {
    return getCount();
}

@Override
public int getItemViewType(int position) {
    return position;
}

更新,但与加载程序回调问题仍然相同。我在上一个项目上按开始,然后向下滚动,看不到值,向上滚动一点并看到值。可怜。

更新2本文解决了我的问题,我只是将layout-height和laoyut-weight从“ wrap_content”更改为“ fill_parent”,以避免多次调用getView()方法。http://gmariotti.blogspot.com/2013/06/tips-for-listview-view-recycling-use.html

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Selenium python错误:元素无法滚动到视图中

如何在水平滚动视图中添加许多列表视图?

滚动视图中的ListView我的滚动视图移到列表视图的顶部。我该如何预防?

滚动后如何使列表元素获取DragEvents

在滚动视图中放置视图和元素

元素<option>无法滚动到视图中

滚动后,卡片视图中列表视图的高度正在改变

在列表视图中滚动地图时如何避免滚动列表视图

在列表视图中滚动时图像消失

在应用程序启动时,滚动到列表视图中的最后一个元素

有什么方法可以显示列表视图中的元素并逐一滚动吗?

在表格视图中滚动后,选中标记会更改

硒元素无法滚动到视图中

从列表视图中删除元素(滑动或单击)

如何将滚动列表视图放在滚动视图中?

向下滚动获取列表视图中的坐标

从多列表视图中删除选定的元素

滚动后,列表视图中的TextView消失

将元素隐藏在列表视图中

当元素的底边滚动到视图中时使它们固定

滚动到反应列表视图中的选定元素

如何将列表的活动元素滚动到视图中?

滚动时我的文本视图在列表视图中消失

JavaScript-将溢出的列表元素滚动到视图中

使列表视图不可滚动或使列表视图在滚动视图中垂直展开

在列表视图中添加点滚动颤动

将带有“highlight”类的列表项滚动到有序列表元素的视图中

将元素添加到列表并滚动到相同的滚动视图后延迟

在 SwiftUI 视图中插入非列表元素