사용자 지정 어댑터가있는 ListView가 있으며 각 행에는 사용자가 설정할 수있는 검색 바가 들어 있습니다. 각 탐색 모음에는 어댑터에 설정된 seekBarChangeListener가 있으며 사용자가 ListView에서 검색 막대 값을 변경하면 어댑터의 arraylist가 업데이트됩니다. 이것은 내가 어댑터의 getView()
에있어 무엇 : 스크롤 후 안드로이드 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가 다시 호출되면 seekListbar는 arrayList의 값을 변경했지만 초기 값으로 돌아갑니다.
누군가 내가 여기서 잘못 가고있는 것을 보여줄 수 있습니까? 감사합니다
에게 설명 당신은 각 검색 막대의 값을 저장하기 위해 별도의 목록을 작성하고의 getView 방법에 해당하는 값으로 설정해야합니다. Listview는 뷰를 재활용합니다. – Chol
ListView는 뷰를 재활용하지만 어댑터는 동일한 ArrayList를 유지합니다. 뷰가 재활용되면 getView()가 다시 호출되어 동일한 ArrayList에 액세스합니다. 따라서 ArrayList를 변경하면 getView()가 다시 호출되면 새로운 값이 표시됩니다. – Highway62
예, 맞아요, 이상 해요. – Chol