从片段到片段的调用方法(刷新适配器)

时间:2015-05-08 06:16:47

标签: java android load adapter

您好我正在尝试调用位于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);

3 个答案:

答案 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实例化它,那么您的策略可能不正确,您应该将代码放入您的活动中。