完全编辑
好的我会尝试更具体。
我正在开发一个小型app抽屉。因此,我需要一种让用户选择类别的方法。 这是问题的要点。如果有另一种比我的方法更好的方法,请告诉我。
所以我尝试实现这一点是将所有应用程序加载到数组列表并将其保存到服务中,以使其在应用程序中可用。应用程序的加载由asynctask完成。
MainActivity:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
packageManager = getPackageManager();
if ((AppDrawerService.getApps()) == null) {
apps = new ArrayList<ApplistItem>();
loadAppsToService();
} else {
//if Service already holds the data
manageViews();
}
}
private void loadAppsToService() {
LoadApplications loadApps;
loadApps = new LoadApplications(this);
loadApps.setOnLoadApplicationsFinishedListener(this);
loadApps.execute();
}
private void manageViews() {
FragmentManager fragmentManager = getSupportFragmentManager();
myViewPager = (ViewPager) findViewById(R.id.view_pager);
myViewPager.setAdapter(new ViewPagerAdapter(fragmentManager, this));
}
@Override
public void OnLoadApplicationsComplete(ArrayList<ApplistItem> apps) {
manageViews();
}
LoadApplications:
@Override
protected void onPostExecute(Object o) {
AppDrawerService.setApps(apps);
listener.OnLoadApplicationsComplete(apps);
super.onPostExecute(o);
}
ViewPagerAdapter:
@Override
public Fragment getItem(int position) {
Fragment category = null;
category = new AppListFragment()
return category;
}
@Override
public int getCount() {
pages = 5;
return pages;
}
AppListFragment:
@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
if ((AppDrawerService.getApps()) == null) {
apps = new ArrayList<ApplistItem>();
} else {
apps = AppDrawerService.getApps();
}
v = getActivity().findViewById(android.R.id.list);
myApplist = (ListView) v;
applistAdapter = new ApplistAdapter(context, 0, apps);
myApplist.setAdapter(applistAdapter);
myApplist.setOnItemClickListener(this);
}
我对此代码的问题是,它总是只使用applist填充一个Fragment。在第一次启动时,第一个片段将填充应用程序,但如果您向右滑动两个片段,然后向后滑动一个片段,则会填充此片段(第二个)。我的印象是
return new ApplistFragment();
来自ViewPager的实际上并没有创建片段的独立实例。 (至少我是这么认为的)
我想要的是显示未定义数量的碎片,这些碎片都可以显示同一列表的不同类别。所以,如果可能的话,我只想加载一次列表,我想为每个片段重用Fragment代码,因为我不想限制最大类别数量。
我的想法是使用ApplistAdapter过滤每个类别的不需要的应用程序,但我真的不知道。 真的非常感谢帮助,因为我不知道该怎么做。
提前致谢。
答案 0 :(得分:0)
我会改变这一切的合作方式。我头脑中的一些建议:
Service
代替Activity
和Intent
的数据
例如在数据库中将其保留在某处。Service
告诉IntentService
您要下载的内容以及何时执行此操作。Service
代替IntentServices
。
Intent
已在单独的工作人员中处理每个AsyncTask
线程所以你不需要IntentService
或类似的东西
Fragment
执行下载。onResume()
都应该在Fragments
中加载数据库中的数据。您
可以使用本地广播在数据时通知{{1}}
在他们被展示时改变了。如果您不向我们提供更多信息,将很难向您提供非常具体的建议。