3

我正在处理碎片。
我有一个Activity和不同的fragments.
每个都fragment需要访问Class(call it X)允许它访问数据库的 a ,但是,因为我有很多片段,我不想Class X在每个片段中创建不同的实例,因为我认为它需要很多memory.
那我该怎么办?
我写了这样的东西(用吸气剂),但它不起作用!

public class MyActivity {
  private ClassX classx;

  .....

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

但是,我怎么能从fragment?

4

5 回答 5

12

从片段中调用您的活动方法

((MyActivity )  getActivity()).getClassX() ;
于 2012-08-22T09:45:40.243 回答
4

你必须额外的演员需要做:

Activity activity123 = getActivity();

if(activity123 instanceof ParentActivity) {
    ((ParentActivity) activity123).someMethodInParentActivity();
}
于 2013-05-21T10:36:49.167 回答
3

这更像是一个 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();

}

然后你的具体片段可以扩展你的BaseFragment例如SearchListFragment extends BaseFragment

希望这可以帮助。

值得一读的单例数据库

问候,克里斯

于 2012-08-22T09:44:15.173 回答
2

定义一个调用的接口Callbacks(或者如果你想要的其他东西)。在其中,有一个名为getClassX(). 然后让你的 Activity 实现Callbacks接口。

在您的 Fragments 中onAttach,存储对Callbacks对象的引用(即您的活动通过以下方式:

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

这将保证 Fragments 能够调用该函数。(如果您想稍后在另一个应用程序中重用片段)

然后在您的 Activity 中onCreate(),创建ClassX. 在您的getClassX()方法中,只需返回对它的引用。

当你想从你的片段中引用它时,打电话给你,mCallbacks.getClassX()你应该被排序。

于 2012-08-22T09:43:04.000 回答
0

您可以在活动中使用静态对象,并从片段中使用它,或者在片段中调用 getActivity() 方法来访问整个活动对象/方法

于 2012-08-22T09:36:39.427 回答