从片段调用非父级Activity方法而不创建新实例

时间:2014-05-08 13:50:34

标签: android-fragments google-drive-api

我有我的MainActivity,里面有很多片段。我还有另一个活动作为我的启动器,并与我的应用程序的Google云端硬盘部分有关。启动时,此活动将启动,连接到Drive,然后启动MainActivity。我的一个片段中有一个按钮,当按下时,需要调用DriveActivity中的方法。我无法创建DriveActivity的新实例,因为googleApiClient将为null。这有可能,我该怎么做呢?我已经尝试过使用getActivity和cast,但我认为这不起作用,因为DriveActivity不是父片段。

button.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View view) {
    //TODO for test only remove
        directory = new Directory(SDCARD + LOCAL_STORAGE);
        byte[] zippedFile = directory.getZippedFile(SDCARD + STORAGE_LOCATION + directory.getZipFileName());

     //Here I need to somehow call DriveActivity.uploadFileToDrive(zippedFile);
        //((DriveActivity)getActivity()).uploadFileToDrive(zippedFile);
    }
});

1 个答案:

答案 0 :(得分:1)

是的,所以我对heirarchy有点困难,但我认为你想要做的是在片段中定义一个方法,该活动需要覆盖才能使用。

这将允许您按下按钮,然后触发实际实现在父级内部的方法。

    public interface Callbacks {
    /**
     * Callback for when an item has been selected.
     */
    public void onItemSelected(String id);
}

示例实现:

 private static Callbacks sDummyCallbacks = new Callbacks() {

    @Override
    public void onItemSelected(String id) {
        //Button fired logic
    }
};

所以在孩子中你只需要打电话:

this.onItemSelected("ID of Class");

<强> EDITED

回想起我认为你需要的是一项活动,其唯一目的是上传文件,而不是发起其他活动。

以下是“创建文件”活动的示例:Google Demo for creating a file on drive

以下是“基本上传”活动“Base Service creator

的示例