gpt4 book ai didi

android - 在 Android ListView 中消失的 ProgressBar

转载 作者:行者123 更新时间:2023-11-29 18:12:25 25 4
gpt4 key购买 nike

我在 Android 上遇到一个奇怪的问题。

我有一个带有列表元素自定义 View 的 ListView。这个自定义 View 包含一个 ProgressBar 和一个 RadioButton。 Here's a nice screenshot .

每当我检查 radio 并启动操作模式时,所有进度条都会消失。 Here's another screenshot .

如果屏幕方向改变,或者我滑开键盘,一切都会恢复正常。

现在我看到很多关于这类问题的帖子,与适配器回收 View 有关。但是,调用 ListView.invalidateViews 没有任何效果。有没有办法强制完全刷新整个 ListView?

这是我的适配器代码:

public class SimpleContactsCursorAdapter extends SimpleCursorAdapter {

public SimpleContactsCursorAdapter(Context context, int layout, Cursor c, String[] from,
int[] to, int flags) {
super(context, layout, c, from, to, flags);
}

@Override
public void bindView(View view, Context context, Cursor cursor) {
TextView nameView = (TextView) view.findViewById(R.id.contact_item_name);
TextView callView = (TextView) view.findViewById(R.id.contact_call_text);
ProgressBar progressBar = (ProgressBar) view.findViewById(R.id.contact_item_progress);

String name = cursor.getString(Contact.Columns.COLUMN_INDEX_NAME);
int delta = cursor.getInt(Contact.Columns.COLUMN_INDEX_DELTA);
String callString;

nameView.setText(name);

if (delta >= 0) {
callString = getString(R.string.call_in, delta);
}
else {
callString = getString(R.string.days_late, Math.abs(delta));
progressBar.setProgressDrawable(mResources.getDrawable(R.drawable.late_progress_bar));
}
callView.setText(callString);

progressBar.setProgress(Math.abs(delta));
}
};

最佳答案

这看起来像是一个回收问题,但实际上比那简单得多。发生的事情是进度条可绘制对象失去了对其边界的跟踪,将其设置为 0,因此消失了。您可以通过保存边界并像这样重置它们来解决它:

public class SimpleContactsCursorAdapter extends SimpleCursorAdapter {

public SimpleContactsCursorAdapter(Context context, int layout, Cursor c, String[] from,
int[] to, int flags) {
super(context, layout, c, from, to, flags);
}

@Override
public void bindView(View view, Context context, Cursor cursor) {
TextView nameView = (TextView) view.findViewById(R.id.contact_item_name);
TextView callView = (TextView) view.findViewById(R.id.contact_call_text);
ProgressBar progressBar = (ProgressBar) view.findViewById(R.id.contact_item_progress);

String name = cursor.getString(Contact.Columns.COLUMN_INDEX_NAME);
int delta = cursor.getInt(Contact.Columns.COLUMN_INDEX_DELTA);
String callString;

nameView.setText(name);

if (delta >= 0) {
callString = getString(R.string.call_in, delta);
}
else {
callString = getString(R.string.days_late, Math.abs(delta));

Rect bounds = progressBar.getProgressDrawable().getBounds(); //Save the drawable bound
progressBar.setProgressDrawable(mResources.getDrawable(R.drawable.late_progress_bar));
progressBar.getProgressDrawable().setBounds(bounds); //Set the bounds to the saved value
}
callView.setText(callString);

progressBar.setProgress(Math.abs(delta));
} };

希望这对您有所帮助。

关于android - 在 Android ListView 中消失的 ProgressBar,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9987630/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com