从父活动更新私有ListFragment

时间:2014-06-02 16:37:10

标签: java android listview adapter android-listfragment

我有一个FragmentActivity,可以创建一个ListFragmentListFragment内部是自定义适配器。当我试图公开适配器时,它不会让我。所以,我真的无法访问适配器,或者我不知道如何获得它。我使用我在生命周期早期声明的对象的公共arraylist静态地向listview添加一些数据。但是,我想从数据库中使用AsyncTask检索其他数据。我在父活动中获取此数据,并且在完成获取数据时我就知道了。所以, 我是否可以更新listView中的ListFragment并且可以访问arraylist,但无法访问适配器?如果是这样,我可以从活动中执行此操作,还是需要以某种方式调用listFragment中的方法?如果我需要在listFragment中调用方法,如何从活动中访问该方法?如果在没有访问适配器的情况下无法做到这一点,如何在没有public关键字的情况下访问适配器?将AsycTask移至我的ListFragmen t?

会更好吗?

我知道这听起来很多,但我只是想知道如何用那些简洁来刷新listview。非常感谢帮助。

致电方法:

ListFragment fragment = (ListFragment) getSupportFragmentManager().findFragmentByTag("fragtag");
                fragment.updateData();

刷新的方法:

public void updateData(){
    ((ArrayAdapter)this.getListAdapter()).notifyDataSetChanged();
}

它位于我ListFragment的子类中,但不在任何方法中。

**编辑:**现在我收到以下错误:

Error parsing data java.lang.ClassCastException: com.dynamic_internet_solutions.scsinfo.app.SpeakerListFragment$1SpeakersListAdapter cannot be cast to android.widget.ArrayAdapter

**编辑 - 解决:**我做了

ListFragment fragment = (ListFragment) getSupportFragmentManager().findFragmentByTag("fragtag");
BaseAdapter adapter = (BaseAdapter) fragment.getListAdapter();
adapter.notifyDataSetChanged();

在初始化后设置片段的标记。

1 个答案:

答案 0 :(得分:1)

您始终可以使用getListAdapter()方法访问ListFragment的ListAdapter。您可以轻松获取列表适配器并修改其中的数据。我不确定为什么你在公开你的适配器时遇到麻烦。你是在内部声明它还是作为一个单独的类?你从编译器得到的错误是什么?

顺便说一下,你可能想在View Holder pattern上阅读我的两篇文章并制作reusable list adapters以使你的ListAdapter更加精彩。