最近一段時間沒有更新博客了,是由於一直忙於一個Android的項目,給某企業作一款基於北斗定位的物流車載終端。這個項目的難點在於平板的通訊方式不是採用傳統使用自帶的通訊模塊,而是使用串口經過車載部標儀來進行通信。對此,須要使用到NDK來開發和串口的通訊服務,這個項目中我主要負責Android平板的全部界面和交互制做、以及業務邏輯的實現。個人另外一名同窗負責串口通訊的開發,二人合做開發這個項目。整個項目組有十幾我的,Android端就咱們兩個,因此任務仍是很重的,目前進度過半,仍是每天加班,雖然很累,可是成長的路上少不了辛苦,遇到問題、解決問題,咱們一直在路上。java
迴歸正題,今天主要是記錄一個我開開發中遇到的一個小問題,其實這不是第一次遇到,之因此記錄下來是爲了提供個人解決辦法供你們參考!ide
問題描述:當主Activity A是一個Tabhost佈局,或者是一個ActivityGroup,在子Activity B中使用startActivityForResult來開啓一個新的Activity C,新Activity C操做完後返回Activity B並傳回一個值,這個值在Activity B的onActivityResult方法中沒法取到。佈局
問題緣由:startActivityForResult後觸發的回調方法並不在Activity B中,而是在Activity A中,Tabhost和ActivityGroup都是Activity容器,在子Activity中使用startActivityForResult後都只會觸發其父Activity的回調方法。spa
解決方案:.net
1.在Activity B中使用以下方法開啓Activity Cblog
[java] view plaincopy接口
getParent().startActivityForResult(intent, 0); 開發
2.新建一個回調接口OnTabActivityResultListenerget
[java] view plaincopy博客
public interface OnTabAactivityResultListener{
public void onTabActivityResult(int requestCode, int resultCode, Intent data);
}
3.讓Activity B實現上述接口,在Activity A的onActivitResult方法中作以下操做:
[java] view plaincopy
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
//取得當前活動的Activity
Activity liveActivity = getLocalActivityManager().getCurrentActivity();
//回調方法
OnTabAactivityResultListener onTabAactivityResultListener = (OnTabAactivityResultListener)liveActivity;
onTabAactivityResultListener.onTabActivityResult(requestCode, resultCode, data);
}
4.在Activity B中實現接口OnTabActivityResultListener中的方法,取到返回值
[java] view plaincopy
@Override
public void onTabActivityResult(int requestCode, int resultCode, Intent data) {
if (resultCode == RESULT_OK) {
Bundle bundle = data.getExtras();
String type = bundle.getString("type");
}
}
本方案的方法就是實現了一個回調方法,使A獲得操做結果後,回調B中實現接口的方法,從而獲得返回值更新B的UI;