Java 从父活动更新私有ListFragment
我有一个Java 从父活动更新私有ListFragment,java,android,listview,adapter,android-listfragment,Java,Android,Listview,Adapter,Android Listfragment,我有一个FragmentActivity,它创建了一个ListFragment。ListFragment中有一个自定义适配器。当我试图公开适配器时,它不允许我这样做。因此,我实际上没有访问适配器的权限,或者我不知道如何获取它。我使用在生命周期早期声明的对象的公共arraylist静态地向列表视图添加一些数据。但是,我希望使用AsyncTask从数据库检索其他数据。我在父活动中获取此数据,我知道它何时完成数据获取。所以 我是否可以通过访问arraylist而不是访问适配器来更新ListFragme
FragmentActivity
,它创建了一个ListFragment
。ListFragment
中有一个自定义适配器。当我试图公开适配器时,它不允许我这样做。因此,我实际上没有访问适配器的权限,或者我不知道如何获取它。我使用在生命周期早期声明的对象的公共arraylist静态地向列表视图添加一些数据。但是,我希望使用AsyncTask
从数据库检索其他数据。我在父活动中获取此数据,我知道它何时完成数据获取。所以
我是否可以通过访问arraylist
而不是访问适配器来更新ListFragment
中的listView
?如果是这样,我可以从活动中执行吗?或者我是否需要以某种方式调用listFragment
中的方法?如果我需要调用listFragment
中的方法,我如何从活动中访问该方法?如果在没有访问适配器的情况下这是不可能的,那么如何在没有public关键字的情况下访问适配器?将我的AsycTask
移动到我的ListFragmen
t会更好吗
我知道这听起来好像很多,但我只是想知道如何用这些情况刷新列表视图。非常感谢您的帮助
调用方法:
ListFragment fragment = (ListFragment) getSupportFragmentManager().findFragmentByTag("fragtag");
fragment.updateData();
刷新的方法:
public void updateData(){
((ArrayAdapter)this.getListAdapter()).notifyDataSetChanged();
}
它在我的ListFragment
子类中,但不在任何方法中
**编辑:**现在我得到以下错误:
解析数据时出错java.lang.ClassCastException:com.dynamic_internet_solutions.scsinfo.app.SpeakerListFragment$1SpeakerListAdapter无法转换为android.widget.ArrayAdapter
**编辑-解决:*我做了
ListFragment fragment = (ListFragment) getSupportFragmentManager().findFragmentByTag("fragtag");
BaseAdapter adapter = (BaseAdapter) fragment.getListAdapter();
adapter.notifyDataSetChanged();
在初始化时设置片段的标记之后。您始终可以使用该方法访问ListFragment的ListAdapter。您可以轻松地获取列表适配器并修改其中的数据。我不知道为什么您在公开适配器时遇到问题。您是将其声明为内联的,还是作为一个单独的类?从编译器中得到的错误是什么
另外,您可能想阅读我在和上的两篇文章,使您的ListAdapter更棒。它位于ListFragment
的onCreateView
方法中的一个类中。它说这里不允许使用public。
该方法有效,但大多数人使用notifyDataSetChanged()
,并且它不识别this.getListAdapter().notifyDataSetChanged()
。它表示“无法解析”。notifyDataSetChanged()
不是的成员。您需要在onCreate()
中强制转换为正确的子类型。因此,如果onCreate()
执行:new ArrayAdapter(){…}
则执行((ArrayAdapter)getListAdapter()).notifyDataSetChanged()
或者,在类内将ListAdapter类声明为“``公共静态类MyListAdapter扩展ArrayaAdapter{…}``而不是方法,或者将其移动到另一个类文件中。您不能将匿名内部类公开。因此我不能使用notifyDataSetChanged()
?那么如何刷新我的列表片段
?请重新阅读上面的注释。由于notifyDataSetChanges()
不是ListAdapter
接口的一部分,因此必须强制转换到正在使用的ListAdapter
的子类。使用FragmentManager获取片段。您必须强制转换到ListFragment的子类才能访问新方法,或者您可以强制转换到ListFragment,对其调用getListAdapter(),然后将结果强制转换为ListAdapter类型。