更新ListView行而不会丢失SeekBar焦点

时间:2013-01-22 01:59:24

标签: android android-listview focus seekbar

我有ListView项,其中包含一行项目,其中每行包含SeekBarTextView。每当我移动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进行持久更新,如果用户滚动则会出现问题。

有关如何处理此问题的任何建议吗?

1 个答案:

答案 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));
    }
}
//...

这可以为您提供顺畅的更新。