Android 片段:从数据库加载数据缓慢



我有一个带有列表视图的片段B。列表视图中的数据是从本地数据库获取的。当我单击片段 A 中的 texview 时,我正在打开包含数据库中数据的片段 B。但是在加载片段 B 之前,我可以在几分之一秒内看到片段 A。FragmentB 具有 asyncTask,其中正在进行数据库查询。如何避免这一秒延迟。

从片段 A 转到片段 B 的代码

borerangeselect.setOnClickListener(new OnClickListener() {
            BoreRangeFragment boreranges = new BoreRangeFragment();
            @Override
            public void onClick(View v) {
                rangeboregrade = boregradeselect.getText().toString();
                if (!rangeboregrade.equalsIgnoreCase("select")) {
                    FragmentManager fragmentManager = getFragmentManager();
                    FragmentTransaction ft = fragmentManager.beginTransaction();
                    ft.add(R.id.content_frame, boreranges);
                    FragmentChangeActivity.fragmentStack.lastElement().onPause();
                    ft.hide(FragmentChangeActivity.fragmentStack.lastElement());
                    FragmentChangeActivity.fragmentStack.push(boreranges);
                    ft.commit();
                }
            }
        });

FragmentB OnActvitycreated()

@Override
    public void onActivityCreated(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onActivityCreated(savedInstanceState);
            new MyBoreRangeTask().executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR,ToleranceFragment.rangeboregrade);
    }

如果您正在使用SQLite,那么最好使用LoaderManagers,它们在使用db时非常易于使用且非常高效。

public class SampleActivity extends Activity implements LoaderManager.LoaderCallbacks<Cursor> {
  public Loader<Cursor> onCreateLoader(int id, Bundle args) { ... }
  public void onLoadFinished(Loader<Cursor> loader, Cursor data) { ... }
  public void onLoaderReset(Loader<Cursor> loader) { ... }
  /* ... */
}

以下是安卓文档的网址,您可以参考以获取更多信息,http://developer.android.com/reference/android/app/LoaderManager.html

希望这将帮助您解决问题。

您可以使用 onPreExecute 方法中的"进度"对话框,并将其隐藏在 doInBackground() 方法或查询结束的位置。希望它有效。

最新更新