ViewPager从片段A更新片段B中的listView

时间:2012-07-31 20:36:58

标签: android android-listview android-fragments android-viewpager

我有一个带有两个片段的ViewPager。在第一个,有按钮(它是一个菜单),它们代表不同的类别。在第二个,它是一个显示数据的listView。 我正在寻找一种方法来更改数据,以便在用户单击其中一个菜单项时显示在listView上。 例如:用户单击菜单项1(片段1),片段2上的listView必须使用相应的数据进行更新。

我从Google Android developer about fragments阅读了文档,但我无法解决,我没有找到解决问题的方法。

也许我错过了什么?

编辑:我试图通过清除listItems.clear()的数据列表(ArrayList> listItems)来清除我的ListView。我没有找到如何做adapter.clear(),似乎这个方法在类Adapter中不存在。

总结一下:我在我的片段中创建了一个包含ListView(Fragment2)的更新方法。我通过主活动中的回调方法调用它,该部分似乎工作(我用调试模式检查它)。 在我的片段2的更新方法中,我使用listItems.clear()清除数据,然后执行片段的OnActivityCreated()。在其中,我的线程调用下载数据,然后在OnPostExecute中创建ListView。

以下是我的代码示例(fragment2):

// After data are ready
lvListe = (ListView) getView().findViewById(R.id.lvListe);
lvListe.setSelected(true);
lvListe.setScrollingCacheEnabled(false);

adapter = new LazyAdapter(getActivity(),
getActivity().getBaseContext(), listItems,
     R.layout.affichageitem, new String[] { "image", "title",
                    "subtitle" }, new int[] { R.id.img_title,
                    R.id.titre_main, R.id.soustitre_main });

lvListe.setAdapter(adapter);
lvListe.setClickable(true);

lvListe.setOnItemClickListener(onItemClickListener);

// Update method :

public void update(String requete, String type)
{
    this.type = type;
    this.requete = requete;

    listItems.clear();
}

2 个答案:

答案 0 :(得分:2)

我可能会这样做的方法是在托管Activity的{​​{1}}中创建一个回调方法,并在第二个ViewPager中创建一个方法来更新数据。

然后你会这样称呼:

Fragment

开发者页面显示了如何为class Fragment1... { ... callBackUpdate(data); } class Activity... { ... public void callBackUpdate(String data) { Fragment2.update(data); } } class Fragment2... { ... public void update(String data) { //do whatever } } 创建回调方法。

编辑:实际上这就是开发者页面的说法。他们为回调创建了接口Activity

编辑:我假设您正在将此库用于LazyLoader:https://github.com/thest1/LazyList

如果是这样,那么您可以添加方法来自行清除数据。为此,请在ListAdapter中添加如下方法:

OnArticleSelectedListener

这可能不完全适合您目前的方式,但您应该明白这一点。

答案 1 :(得分:0)

尝试在http://developer.android.com/reference/android/app/FragmentTransaction.html

使用称为FragmentTransaction管理器的内容

以及FragmentManager http://developer.android.com/reference/android/app/FragmentManager.html

查看与FragmentManager和FragmentTransaction相关的stackoverflow的一些问题,以解决这个问题。您需要做的就是用一个由特定xml

膨胀的新片段替换片段