我有一个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);
答案 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不被冻结。
此处已经提出并回答了类似问题,使用搜索,如果没有别的话