0

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

我从Google Android 开发人员那里阅读了有关片段的文档,但我无法解决,我没有找到解决问题的方法。

也许我错过了什么?

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

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

这是我的代码示例(片段2):

// 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();
}
4

2 回答 2

2

我可能会这样做的方式是在Activity托管中创建一个回调方法,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.

编辑:实际上这就是开发人员页面所说的这样做。他们为回调创建接口OnArticleSelectedListener

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

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

public void clear()
{
    data = new String[](); //depends on what data is, if it's a List then just call                             data.clear() for example
    imageLoader=new ImageLoader(activity.getApplicationContext()); //clear the images
    notifyDataSetChanged(); //notify the adapter that the data has changed
}

这可能不完全符合您目前的想法,但您应该明白这一点。

于 2012-07-31T21:26:52.000 回答
0

尝试在http://developer.android.com/reference/android/app/FragmentTransaction.html使用称为 FragmentTransaction 管理器的东西

还有 FragmentManager http://developer.android.com/reference/android/app/FragmentManager.html

查看 stackoverflow 上与 FragmentManager 和 FragmentTransaction 相关的一些问题来解决这个问题。您需要做的就是将片段替换为由特定 xml 膨胀的新片段

于 2012-07-31T20:43:18.443 回答