我有一个带有两个片段的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();
}
答案 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
膨胀的新片段替换片段