从片段调用活动方法

时间:2012-08-22 09:33:47

标签: android methods android-activity call fragment

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

memory

但是,我怎样才能从public class MyActivity { private ClassX classx; ..... public ClassX getClassX() { return classx; } ..... } 调用它?

5 个答案:

答案 0 :(得分:12)

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

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

答案 1 :(得分:4)

你需要做额外的演员:

Activity activity123 = getActivity();

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

答案 2 :(得分: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

希望这有帮助。

值得一读singletonsdatabase

此致 克里斯

答案 3 :(得分:2)

定义一个名为Callbacks的界面(如果需要,可以设置其他界面)。在其中,有一个名为getClassX()的公共方法。然后让您的Activity实现Callbacks接口。

在您的片段中,在onAttach中,存储对Callbacks对象的引用(即您的活动,例如:

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

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

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

当您想要从片段中引用它时,请调用mCallbacks.getClassX()并对您进行排序。

答案 4 :(得分:0)

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