您好我正在尝试调用位于loadFiles()
的此函数fragmentB
,我想从FragmentA
调用它,因此我可以刷新我的GridView
图像和视频。
我从同一方法中得到此错误
FATAL EXCEPTION: main
java.lang.NullPointerException
FragmentB
中的方法:
public void loadFiles(){
gridView = (GridView) this.v.findViewById(R.id.grid);
File f = new File(home);
if (f.exists()){
String [] media = f.list();
ArrayList<String> files = new ArrayList<>();
for (int i=0; i<media.length;i++){
if (media[i].endsWith(".jpg")||
media[i].endsWith(".png")||
media[i].endsWith(".JPEG")||
media[i].endsWith(".3gp")||
media[i].endsWith(".mp4")||
media[i].endsWith(".mov")){
files.add(media[i]);
}
if (i==media.length-1){
GridAdapter adapter = new GridAdapter(this.v.getContext(), files, gridView);
adapter.notifyDataSetChanged();
gridView.setAdapter(adapter);
}
}
}
}
我如何在FragmentA
中调用它:
FragmentB b = new FragmentB();
b.loadFiles();
我认为这个问题是因为这条线,但我已经尝试了一切,没有运气:(
GridAdapter adapter = new GridAdapter(this.v.getContext(), files, gridView);
答案 0 :(得分:1)
我建议你这样做:
public class Utils{
public static ArrayList<String> loadFiles(){
File f = new File(home);
if (f.exists()){
String [] media = f.list();
ArrayList<String> files = new ArrayList<>();
for (int i=0; i<media.length;i++){
if (media[i].endsWith(".jpg")||
media[i].endsWith(".png")||
media[i].endsWith(".JPEG")||
media[i].endsWith(".3gp")||
media[i].endsWith(".mp4")||
media[i].endsWith(".mov")){
files.add(media[i]);
}
}
return files;
}
}
}
现在在FragmentA和FragmentB等中你可以做到
gridView = (GridView) this.v.findViewById(R.id.grid);
GridAdapter adapter = new GridAdapter(this.v.getContext(), Utils.loadFiles(), gridView);
gridView.setAdapter(adapter);
答案 1 :(得分:0)
通常你会想要一个片段与另一个片段进行通信 示例根据用户事件更改内容。所有 片段到片段的通信是通过相关联的 活动。两个碎片永远不应该直接沟通。
请参阅此链接here,您将找到所有必需的详细信息;您也可以下载包含示例应用程序的zip文件。
答案 2 :(得分:0)
如果你想调用片段方法是因为该片段存在,所以你可以找到并调用它:
Fragment2 myFragment = (MyFragment2) getFragmentManager().findFragmentByTag("TAG_NAME");
myFragment.method();
如果它不存在且您必须从Fragment1实例化它,那么您的策略可能不正确,您应该将代码放入您的活动中。