【发布时间】:2023-03-13 06:35:02
【问题描述】:
我需要在不清除和闪烁的情况下刷新我的列表视图,只显示新项目。但我不能立即这样做,因为我会在几秒钟内使项目异步。由于在程序一开始就清除了适配器,此代码无法正常工作。
private void scanLeDevice(final boolean enable) {
if (enable) {
mLeDeviceListAdapterNew.clear();
//mLeDeviceListAdapterNew.notifyDataSetChanged();
// Stops scanning after a pre-defined scan period.
mHandler.postDelayed(new Runnable() {
@Override
public void run() {
mScanning = false;
mBluetoothAdapter.stopLeScan(mLeScanCallback);
runOnUiThread(new Runnable(){
@Override
public void run() {
mLeDeviceListAdapterNew.notifyDataSetChanged();
scanLeDevice(true);
//invalidateOptionsMenu();
}
});
}
}, SCAN_PERIOD);
//Here my adapter updates with new items,
//but it's shouldn't be displayed until I call adapter
//refresh data in SCAN_PERIOD
【问题讨论】:
-
您实际上是在向
ListView添加内容吗?在您向我们展示的代码中,您只调用了notifyDataSetChanged()。或者,也许您应该向我们展示更多代码。 -
详细回答或描述您的 ListView。
-
对代码的一点描述:它异步更新我的列表适配器,但我不想在它再次更新之前清除我的列表。我想清除适配器项目,然后通过异步添加一些新项目,最后用新项目更新列表视图。但是上面的代码在那之后并没有更新我的列表。
-
可能是上面代码中递归的问题。避免递归对我有好处。
标签: java android multithreading listview