tur*_*ndo 1 optimization android android-preferences android-fragments
在我的PreferenceFragment中有一个ListPreference,它以编程方式填充在onCreate()中.因此,片段开始时有一点滞后.为了避免它,我想仅在按下首选项时填充ListPreference,并在加载内容时放置一个不确定的ProgressBar.
我怎么能实现这个?我真的需要重写适配器吗?如何将ListPreference的视图传递给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);
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
692 次 |
| 最近记录: |