来自父活动的java更新私有ListFragment
我有一个FragmentActivity
,它创建了一个ListFragment
。在ListFragment
中有一个自定义适配器。当我试图公开适配器时,它不允许我这样做。因此,我实际上没有访问适配器的权限,或者我不知道如何获取它。我使用我在生命周期早期声明的对象的公共arraylist静态地向listview
添加一些数据。但是,我希望使用AsyncTask
从数据库检索其他数据。我在父活动中获取此数据,我知道它何时完成数据获取。所以
我是否可以使用对arraylist
的访问权限而不是适配器的访问权限更新listView
中的ListFragment
?如果是这样,我可以从活动中执行吗?或者我是否需要以某种方式调用listFragment
中的方法?如果我需要在listFragment
中调用一个方法,我如何从活动中访问该方法?如果在没有访问适配器的情况下这是不可能的,那么如何在没有public关键字的情况下访问适配器?把我的AsycTask
移到我的ListFragmen
行吗
我知道这听起来很多,但我只是想知道如何用这些情景来刷新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 安卓.widget.ArrayAdapter
**编辑-已解决:*我做了
ListFragment fragment = (ListFragment) getSupportFragmentManager().findFragmentByTag("fragtag");
BaseAdapter adapter = (BaseAdapter) fragment.getListAdapter();
adapter.notifyDataSetChanged();
在初始化时设置片段的标记之后
# 1 楼答案
您始终可以使用getListAdapter()方法访问ListFragment的ListAdapter。您可以轻松获取列表适配器并修改其中的数据。我不知道你为什么在公开适配器时遇到问题。您是将其声明为内联的,还是作为一个单独的类?从编译器中得到的错误是什么
顺便说一句,你可能想读我关于View Holder pattern和制作reusable list adapters的两篇文章,让你的ListAdapter更棒