在TabHost的子Activity中startActivityForResult調用其他Activity時候遭遇到onActivityResult方法不響應的問題.

解決辦法如下:

1.通過父Activity啓動其他Activity;

2.實現父Activity的onActivityResult方法,將該處接收到的請求轉發給當前活動的子Activity;

3.自定義一個轉發接口用來實現第2步中的轉發功能;(需要新建一個接口文件)

4.子Activity中實現第3步接口中的方法用來接收返回信息;

 

代碼如下:

1.通過父Activity啓動其他Activity(此頁面爲TabHost的子頁面之一(如Tab1Activity.class)

1 getParent().startActivityForResult(new Intent(this,ChildActivity.class), REQUEST_CODE); 

 

2.實現父Activity的onActivityResult方法(此方法需繼承ActivityGroup)

 1 @Override
 2     protected void onActivityResult(int requestCode, int resultCode, Intent data) {
 3         // 獲取當前活動的Activity實例
 4         Activity subActivity = getLocalActivityManager().getCurrentActivity();
 5         //判斷是否實現返回值接口
 6         if (subActivity instanceof OnTabActivityResultListener) {
 7             //獲取返回值接口實例
 8             OnTabActivityResultListener listener = (OnTabActivityResultListener) subActivity;
 9             //轉發請求到子Activity
10             listener.onTabActivityResult(requestCode, resultCode, data);
11         }
12         super.onActivityResult(requestCode, resultCode, data);
13     }
 

另一種繼承Activity的調用方法如下:

1)先在onCreate中調用:

protected LocalActivityManager mLocalActivityManager;//定義當前活動對象列表

 //繼承Activity
  mTabHost = (TabHost) findViewById(R.id.tabhost);
  // 注意下面這段  
  mLocalActivityManager = new LocalActivityManager(this, true);  //注意true表示singleMode爲true,如果爲false,則mLocalActivityManager.getCurrentActivity()會取不到對象
        mLocalActivityManager.dispatchCreate(savedInstanceState); 
        mTabHost.setup(mLocalActivityManager); 

 @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        // 獲取當前活動的Activity實例
  
        Activity subActivity =mLocalActivityManager.getCurrentActivity();
        //subActivity = mLocalActivityManager.getActivity("TabsActivity");
        //判斷是否實現返回值接口
        if (subActivity instanceof TabActivityResultListener) {
            //獲取返回值接口實例
            TabActivityResultListener listener = (TabActivityResultListener) subActivity;
            //轉發請求到子Activity
            listener.onTabActivityResult(requestCode, resultCode, data);
        }
        super.onActivityResult(requestCode, resultCode, data);
    }

 

3.自定義接口(新建的接口文件名爲:TabHostResultListener.java,內容如下:

/**
 * 解決子Activity無法接收Activity回調的問題
 * @author Administrator
 *
 */
public interface OnTabActivityResultListener {
    public void onTabActivityResult(int requestCode, int resultCode, Intent data);
}

4.子Activity需要實現onTabActivityResult方法(頁面名稱如:ChildActivity.java)

@Override
    public void onTabActivityResult(int requestCode, int resultCode, Intent data) {
        if (requestCode == REQUEST_CODE && resultCode == RESULT_OK) {
            //實現該處邏輯
        ...
        }
    }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章