从主活动的viewpager中的片段更新listview

时间:2014-05-15 15:25:57

标签: android listview android-fragments android-viewpager

完全编辑

好的我会尝试更具体。

我正在开发一个小型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过滤每个类别的不需要的应用程序,但我真的不知道。 真的非常感谢帮助,因为我不知道该怎么做。

提前致谢。

1 个答案:

答案 0 :(得分:0)

我会改变这一切的合作方式。我头脑中的一些建议:

  • 下载Service代替ActivityIntent的数据 例如在数据库中将其保留在某处。
  • 您可以使用Service告诉IntentService您要下载的内容以及何时执行此操作。
  • 您还可以使用Service代替IntentServicesIntent已在单独的工作人员中处理每个AsyncTask 线程所以你不需要IntentService或类似的东西 Fragment执行下载。
  • 每个onResume()都应该在Fragments中加载数据库中的数据。您 可以使用本地广播在数据时通知{{1}} 在他们被展示时改变了。

如果您不向我们提供更多信息,将很难向您提供非常具体的建议。