呼叫活动的方法从碎片(Call Activity Method From Fragment)

2019-06-27 06:13发布

我负责的片段。
我有一个Activity和不同fragments
每个fragment需要访问一个Class(call it X)允许它访问数据库,但是,因为我有很多碎片,我不希望创建的不同实例Class X在每一个片段,我认为这将需要大量的memory
所以,我该怎么办?
我写了这样的事情(吸气剂),但它不工作!

public class MyActivity {
  private ClassX classx;

  .....

  public ClassX getClassX() {
     return classx;
  }   
  .....
}

但不是,我怎么能调用它的fragment

Answer 1:

这是一点点的一个Java问题和Android。

如果你在看访问数据库,看看创建数据库单。

因此,像:

public class Database {

    // This starts off null
    private static Database mInstance;

    /**
     * Singleton method, will return the same object each time.
     */
    public static final Database getInstance() {
        // First time this method is called by Database.getInstance() from anywhere
        // in your App. It will create this Object once.
        if(mInstance == null) mInstance = new Database();
        // Returns the created object from a statically assigned field so its never
        // destroyed until you do it manually.
        return mInstance;
    }

    //Private constructor to stop you from creating this object by accident
    private Database(){
      //Init db object
    }

}

因此,然后从你的碎片和活动,你可以再放置在你的类的以下字段(更好地利用使用基本活动和片段,以节省您的重复代码)。

public abstract class BaseFragment extends Fragment {

    protected final Database mDatabase = Database.getInstance();

}

那么你的具体片段可以扩展你的BaseFragmentSearchListFragment extends BaseFragment

希望这可以帮助。

值得一读的关于单身和数据库

问候,克里斯



Answer 2:

从片段致电您的活动的方法

((MyActivity )  getActivity()).getClassX() ;


Answer 3:

你有其他投需要完成:

Activity activity123 = getActivity();

if(activity123 instanceof ParentActivity) {
    ((ParentActivity) activity123).someMethodInParentActivity();
}


Answer 4:

定义所谓的接口Callbacks (或者,如果你想要别的东西)。 在这里面,有一个名为公共方法getClassX() 然后,让您的活动实现Callbacks接口。

在你的片段,在onAttach ,存储到基准Callbacks对象(即你通过类似的活动:

if(activity instanceof Callbacks)
    mCallbacks = (Callbacks)activity;

这将保证该片段能够调用的函数。 (如果你想在另一个应用程序后重新使用的片段)

然后在您的活动中onCreate()创建一个实例ClassX 。 在您的getClassX()方法,只返回对它的引用。

当你想从你的片段的引用,调用mCallbacks.getClassX()你应该进行排序。



Answer 5:

您可以在活动中使用一个静态的对象,并从片段使用它,或致电getActivity()方法,在你的片段,以访问整个活动的对象/方法



文章来源: Call Activity Method From Fragment