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
    而不是
    服务
    IntentServices
    已经在一个单独的worker中处理每个
    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();