我有一個自定義適配器的ListView,每行包含一個用戶可以設置的seekbar。每個seekbar都有一個在適配器中設置的seekBarChangeListener,並且當用戶更改ListView中的seekbar的值時,適配器的數組列表將被更新。這是我在適配器的getView()
已經有了:如何停止滾動後重置值的Android ListView?
@Override
public View getView(final int position, View convertView, final ViewGroup parent) {
final ViewHolder viewHolder;
View v = convertView;
if(v == null){
v = inflater.inflate(R.layout.row, null);
viewHolder = new ViewHolder();
viewHolder.contentView = (TextView) v.findViewById(R.id.pref_content);
viewHolder.sliderView = (SeekBar) v.findViewById(R.id.pref_slider);
v.setTag(viewHolder);
}else{
viewHolder = (ViewHolder) v.getTag();
}
// Get initial values
Prompt p = promptList.get(position);
String content = p.getContent();
int sliderLevel = p.sliderLevel();
// Set views with initial values
viewHolder.contentView.setText(content);
viewHolder.sliderView.setMax(noOfLevels);
viewHolder.sliderView.setProgress(sliderLevel);
// Set Change Listener for Seekbar
viewHolder.sliderView.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
// Set new level of the Slider in the Array List
promptList.get(position).setSliderLevel(progress);
}
});
return v;
}
因此,當用戶改變搜索條的值的ChangeListener從ArrayList中獲取對象,並將其新sliderLevel價值。但是,如果我在ListView中設置了一個新值,然後再次向下滾動,以便再次調用getView,seekbar將返回到其初始值,即使我已更改arrayList中的值。
有人可以幫助告訴我我要去哪裏嗎?謝謝
你應該創建一個單獨的列表,以節省每一個搜索條的價值,並設置在getView方法的相應值。 ListView回收視圖 – Chol
ListView回收視圖,但適配器始終保持相同的ArrayList。當視圖被回收時,再次調用getView(),它訪問相同的ArrayList。所以如果我改變ArrayList,一旦getView()被再次調用,它應該顯示新的值。 – Highway62
是啊你是對的,這很奇怪 – Chol