Android增加数据库性能

时间:2014-03-17 07:40:58

标签: android database android-fragments android-listview database-performance

我有一个listview,如果点击了一个listview元素,那么一个Viewpager会打开以显示内容。

listview和Viewpager都是来自数据库的同一个适配器。

问题是:当viewpager打开时,需要创建相同的列表适配器才能使用。 如何在不重复创建的情况下为viewpager使用Listview的列表。

我从Big Nerd的书中获取这些代码:

这是listfragment:

public class framelist extends ListFragment {
@Override
    public void onCreate(Bundle savedInstanceState) {
        TestAdapter mDbHelper = new TestAdapter(getActivity());
        mDbHelper.createDatabase();
        mDbHelper.open();
        List<element> mElements = mDbHelper.getTestData();

这是Viewpager FragmentActivity

public class CrimePagerActivity extends FragmentActivity {
@Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        mViewPager = new ViewPager(this);
        mViewPager.setId(R.id.viewPager);
        setContentView(mViewPager);

        TestAdapter mDbHelper = new TestAdapter(this);
        mDbHelper.createDatabase();
        mDbHelper.open();
        mElements = mDbHelper.getTestData();

这是Viewpager片段:

public class CrimeFragment extends Fragment {
@Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setHasOptionsMenu(true);
        mNum2 = (int) getArguments().getInt("num");

        TestAdapter mDbHelper = new TestAdapter(getActivity());
        mDbHelper.createDatabase();
        mDbHelper.open();
        List<element> mElements = mDbHelper.getTestData();
        melement = mElements.get(mNum2);

2 个答案:

答案 0 :(得分:0)

您想通过在列表和viewpager

中显示相同的内容来实现什么目标

无论如何,在CrimePagerActivity而不是再次重新创建列表,为什么不将内容复制到列表中

List<element> newList = mDbHelper.getTestData();
mElements.clear();
mElements..addAll(newList);

还有一个建议,你的主题是增加数据库性能,但你要求所有关于列表

遵循DB的单例模式,并且每次都不要创建新的数据库,并确保同步对db的任何调用

答案 1 :(得分:0)

我建议您使用Loader框架来查询内容。如果没有其他内容,请参阅my answer to similar question,它提供了一些非常相关的链接,可以帮助您进行案例研究。

还有一个提示:如果您只是使用简单的方法,即“OpenSqliteDbHelper”中的“Activity实例查询数据库”,那么 > 非常小心并注意您的应用生命周期和Cursor's生命周期管理。当然,如果你使用这种方法,那么非常很难提高性能。如果您使用建议的Loader方法,所有这些问题都会像魔术一样消失,因为它会保留配置更改的数据,而您不必一次又一次地查询数据。

还有一个提示:如果您选择使用直截了当(即没有Loader)方法,确保您在单独的线程上查询数据。这将使您的UI不被冻结。

此处已经提出并回答了类似问题,使用搜索,如果没有别的话