Android 从主活动的viewpager中的片段更新listview
完全编辑 好的,我会尽量说得更具体一些 我正在开发一个小应用程序抽屉。因此,我需要一种让用户选择类别的方法。 这是问题的重点。如果有比我的方法更好的方法,请让我知道 因此,我尝试实现这一点,将所有应用程序加载到一个数组列表中,并将其保存到一个服务中,使其在应用程序中可用。应用程序的加载由异步任务完成 主要活动:Android 从主活动的viewpager中的片段更新listview,android,listview,android-fragments,android-viewpager,Android,Listview,Android Fragments,Android Viewpager,完全编辑 好的,我会尽量说得更具体一些 我正在开发一个小应用程序抽屉。因此,我需要一种让用户选择类别的方法。 这是问题的重点。如果有比我的方法更好的方法,请让我知道 因此,我尝试实现这一点,将所有应用程序加载到一个数组列表中,并将其保存到一个服务中,使其在应用程序中可用。应用程序的加载由异步任务完成 主要活动: @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceS
@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();
}
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);
}
从ViewPager中,实际上并不创建片段的独立实例。(至少我这么认为)
我想要的是显示未定义数量的片段,这些片段都可以显示同一列表的不同类别。因此,如果可能的话,我只想加载列表一次,并且我想为每个片段重用片段代码,因为我不想限制类别的最大数量
我的想法是使用ApplistAdapter为每个类别过滤不需要的应用程序,但我真的不知道。
我真的很感激你的帮助,因为我不知道该怎么做
提前感谢。我将改变这一切的工作方式。我头脑中的一些建议:
- 在
服务中下载数据,而不是在
活动中下载数据 将其保存在某个位置,例如数据库中
- 您可以使用
通知Intent
您要下载什么以及何时下载服务
- 您还可以使用
而不是IntentService
。服务
已经在一个单独的worker中处理每个IntentServices
线程,这样您就不需要在Intent
执行下载IntentService
- 每个
都应该从片段
onResume()中的数据库加载数据。你 可以使用本地广播来通知
片段 在显示它们时已更改
如果您不向我们提供更多信息,将很难向您提供非常具体的建议。Is
MyService.setItems(items)代码>静态方法?也是applistAdapter
用于ViewPager
的适配器?像这样更新片段
不起作用。非常感谢。你能重读一下我的问题吗?因为我是白手起家的,想提供更多的信息。很遗憾,你的回答对我没有帮助。不管怎样,谢谢。我的答案基本不变。我只能保证返回新的ApplistFragment()代码>创建片段的新实例。你的问题太宽泛了。我不能在这里提供一个合理的答案。我不知道您是刚用大写字母开始变量名,还是这是一个静态方法:AppDrawerService.getApps()
,但如果它是一个静态方法,我可以告诉您这只会导致问题。不要在服务
和活动
之间静态传递数据。总结:试着把你的问题缩小到一个特定的问题上。
@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);
}
return new ApplistFragment();