android - 为 PreferenceFragment 的 ListPreference 加载内容时不确定 ProgressBar

标签 android optimization android-fragments android-preferences

在我的 PreferenceFragment 中有一个 ListPreference,它以编程方式在 onCreate() 中填充。因此, fragment 开始时会有一点滞后。为了避免这种情况,我想仅在按下首选项时填充 ListPreference,并在加载内容时放置一个不确定的 ProgressBar。

我该如何实现?我真的需要重写适配器吗?如何获取 ListPreference 的 View 以传递给 View.OnClickListener?

我希望这不是一个微不足道的问题,我已经用谷歌搜索了一段时间,但我不明白我应该如何实际实现整个事情。

提前谢谢你。

最佳答案

我为此创建了一个自定义 PreferenceFragment

您可以扩展这个而不是 PreferenceFragment 并延迟对 addPreferencesFromResource 的调用,直到所有加载完成后,这将隐藏 ProgressBar 并显示您的内容。

public class ProgressBarPreferenceFragment extends PreferenceFragment {

    private FrameLayout progress;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View view = super.onCreateView(inflater, container, savedInstanceState);
        showLoading((ViewGroup) view);
        return view;
    }

    @Override
    public void addPreferencesFromIntent(Intent intent) {
        super.addPreferencesFromIntent(intent);

        hideLoading();
    }

    @Override
    public void addPreferencesFromResource(int preferencesResId) {
        super.addPreferencesFromResource(preferencesResId);

        hideLoading();
    }

    private void hideLoading() {
        ViewGroup root = (ViewGroup) getView();
        if ((root != null) && (progress != null)) {
            root.removeView(progress);
        }
    }

    private void showLoading(ViewGroup root) {
        progress = new FrameLayout(root.getContext());
        FrameLayout.LayoutParams lp = new FrameLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
        lp.gravity = Gravity.CENTER;
        progress.addView(new ProgressBar(root.getContext()), lp);
        LayoutParams lp2 = new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT);
        root.addView(progress, lp2);
    }
}

关于android - 为 PreferenceFragment 的 ListPreference 加载内容时不确定 ProgressBar,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24595918/

相关文章:

java - fragment 中的回收器 View 为空

java - onCreate 中 getWidth() 返回 0

android - setOnItemClickListener 在 eclipse 中给出错误

algorithm - 定义重叠元素或不包含在子集中的元素

mysql - 我应该选择带有 NULL 值的大表还是非 NULL 多表设计?

Java 内联优化是否正确?

java - android中的类对象数组

javascript - 为什么我的 JavaScript 没有加载

android - 在Facebook,Instagram和Youtube等应用程序的所有 View 中导航如何工作?

android - fragment 中的 findViewById