Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/204.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从父活动更新私有ListFragment_Java_Android_Listview_Adapter_Android Listfragment - Fatal编程技术网

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类型。