android - ListView Item 中的 SeekBar 已重置

标签 android android-arrayadapter android-adapter

在我的应用程序中,我有一个带有自定义项目 View 的 ListView。每个 Item 都有一个自己的 SeekBar,其中保存 ListView 中显示的不同 Person 的年龄。我的问题是,我可以为每个人滚动 SeekBar,但如果该 Item 滚出并在下次 SeekBar 重置为 0 时进入。我的 CustomAdapter 如下所示:

public View getView(int position, View convertView, ViewGroup parent) 
{
    View row = convertView;
    PeopleHolder holder = null;

    if(row == null)
    {
        LayoutInflater inflater = LayoutInflater.from(context);
        row = inflater.inflate(layoutResourceId, parent, false);

        holder = new PeopleHolder();

        final TextView tvAge = (TextView) row.findViewById(R.id.Age);
        tvNote.setTag(position);

        holder.age = (SeekBar) row.findViewById(R.id.agekBar); 
        holder.age.setOnSeekBarChangeListener(new OnSeekBarChangeListener()
        {
            @Override
            public void onStopTrackingTouch(SeekBar seekBar){   }

            @Override
            public void onStartTrackingTouch(SeekBar seekBar){   }

            @Override
            public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser)
            {
                    tvAge.setText("" + progress);
            }
        }); 

        holder.name  = (TextView) row.findViewById(R.id.Name);
        row.setTag(holder);
    }
    else
    {
        holder = (PeopleHolder) row.getTag();
    }

    People p = data.get(position);

    holder.name.setText(p.getFullName());
    holder.age.setProgress(p.getAge());

    return row;
}

private static class PeopleHolder
{
    TextView name;
    SeekBar age;
}

最佳答案

一定要在进度改变时改变人物的年龄值:

    // adding a final int that can be accessed from inside the listener
    final int personPosition = position;
    holder.age.setOnSeekBarChangeListener(new OnSeekBarChangeListener()
    {
        ...

        @Override
        public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser)
        {
                tvAge.setText("" + progress);
                // change the age of the person in data
                data.get(personPosition).setAge(progress);
        }
    }); 

关于android - ListView Item 中的 SeekBar 已重置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24100409/

相关文章:

android - 在 ArrayAdapter 中使用传递的上下文

android - 没有自定义项数据类型的自定义 ArrayAdapter

android - 为 RecyclerView 中的其他项目重复图片

java - 将项目添加到 ListView 适配器中的特定列

android - 如何在android studio中正确包含依赖项

android - 目标和最低 Android 版本支持平板电脑

android - 如何从 Chrome 内部触发的 Intent 将结果返回到您的网页?

java - 自定义适配器未在 ListView 上显示任何数据

java - 自定义 CursorAdapter 导致 GridView 性能滞后

Android:弹出键盘时,布局不可见。我该如何解决这个问题?