在我的应用程序中,我有一个带有自定义项目 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/