我有ListView
项,其中包含一行项目,其中每行包含SeekBar
和TextView
。每当我移动SeekBar
中的任何一个时,我都需要TextView
更新所有ListView
个,而不会忽视SeekBar
。
我试过
在notifyDataSetChanged()
上拨打ListView
,但是。{
SeekBar
失去了焦点。
使用以下代码循环遍历ListView
:
for (int i = 0; i < listView.getChildCount(); i++)
{
TextView tv = (TextView) listView.getChildAt(i).findViewById(R.id.textView1);
String value = getData();
tv.setText(value);
}
但是,上面的代码不会对ListView
进行持久更新,如果用户滚动则会出现问题。
有关如何处理此问题的任何建议吗?
答案 0 :(得分:1)
每当我移动任何SeekBar时,我都需要拥有所有TextView 在ListView中更新直播,而不会失去对SeekBar的关注。
您要做的是更新适配器的数据列表而不调用notifyDataSetChanged()
,然后从当前可见的行更新TextViews
。
//...
@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
// found is a reference to the ListView
int firstVisible = found.getFirstVisiblePosition();
// first update the mData which backs the adapter
for (int i = 0; i < mData.size(); i++) {
// update update update
}
// update the visible rows
for (int j = 0; j < found.getChildCount(); j++) {
final View row = found.getChildAt(j);
// get the position from the mData by offseting j with the firstVisible position
((TextView) row.findViewById(R.id.theIdOfTheTextView)).setText(mData.get(firstVisible + j));
}
}
//...
这可以为您提供顺畅的更新。