1

我有ListView一行项目,其中每行包含一个SeekBarTextView。每当我移动任何SeekBar's 时,我都需要将所有TextView'sListView更新到实时状态,而不会失去对SeekBar.

我试过

  • 呼叫notifyDataSetChanged()ListViewSeekBar失去焦点。

  • 循环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,如果用户滚动,这是一个问题。

任何建议如何处理这个问题?

4

1 回答 1

1

每当我移动任何 SeekBar 时,我都需要实时更新 ListView 中的所有 TextView,而不会失去对 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));
    }
}
//...

这应该为您提供平稳的更新。

于 2013-01-27T08:23:18.073 回答