我有一个FragmentActivity
,可以创建一个ListFragment
。 ListFragment
内部是自定义适配器。当我试图公开适配器时,它不会让我。所以,我真的无法访问适配器,或者我不知道如何获得它。我使用我在生命周期早期声明的对象的公共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();
在初始化后设置片段的标记。
答案 0 :(得分:1)
您始终可以使用getListAdapter()方法访问ListFragment的ListAdapter。您可以轻松获取列表适配器并修改其中的数据。我不确定为什么你在公开你的适配器时遇到麻烦。你是在内部声明它还是作为一个单独的类?你从编译器得到的错误是什么?
顺便说一下,你可能想在View Holder pattern上阅读我的两篇文章并制作reusable list adapters以使你的ListAdapter更加精彩。