有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

来自父活动的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) 个答案

  1. # 1 楼答案

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

    顺便说一句,你可能想读我关于View Holder pattern和制作reusable list adapters的两篇文章,让你的ListAdapter更棒