2011-10-29 27 views
1

我使用TabActivity與某些選項卡,每個選項卡包含一個ActvityGroup,每個的ActivityGroup管理多個Activity.one的ActivtyGroups具有三個活動比較:A,B和C.如何在ActivityGroup中使用startActivityForResult()?

在第一A被創建,當用戶點擊所述的一個按鈕,它跳到B.

在乙存在可以用C進行編輯一些重要的數據,點擊B中的「編輯」按鈕時,如果一些數據跳到下

在C中編輯,當我點擊返回按鈕時,我想修改B中的相同數據。 讓我瘋狂的是當我在C類中使用「finish()」時,我的應用程序直接退出。

我在網上搜索了許多解決方案,BU他們都不適合我的情況,我不知道哪裏錯了,請幫我或給我的如何的ActivityGroup

使用startActivityForResult()的一個例子

這裏是我組:

public class MyGroup extends ActivityGroup 
{ 

private int ID=0; 
private AlertDialog dialog; 
private Stack<View>history;     
private LocalActivityManager manager; 

@Override 
protected void onCreate(Bundle savedInstanceState) 
{ 
    super.onCreate(savedInstanceState); 

    history = new Stack<View>(); 
    manager = getLocalActivityManager(); 

    Intent intent = new Intent(this,A.class); 
    startActivity(intent); 
} 

@Override 
public void startActivity(Intent intent) 
{ 
    View view = manager.startActivity(""+ID++,intent).getDecorView(); 
    history.push(view); 
    setContentView(view); 
} 

@Override 
public void startActivityForResult(Intent intent,int requestCode) 
{ 
    // super.startActivityForResult(intent, requestCode); 
    View view = manager.startActivity(""+ID++,intent).getDecorView(); 
    history.push(view); 
    setContentView(view); 
} 

/* 
* if user edited data in C.class. 
* when C.class finished,refresh data in the B.class 
*/ 
@Override 
protected void onActivityResult(int requestCode,int resultCode,Intent data) 
{ 
    Log.e("MyGroup","running"); 
    super.onActivityResult(requestCode, resultCode, data); 
    if(resultCode==RESULT_OK) 
    { 
      //modify data in B.java 
     B subActivity=(B)(manager.getCurrentActivity()); 
     subActivity.handleActivityResult(requestCode, resultCode, data); 
    } 
} 

/* 
* when press back button, manage which page to show next 
* if there is one page in stack,that means when press back button it will 
* exit the app,so we add a dialog to notify user whether exit app or not 
*/ 
@Override 
public void onBackPressed() 
{ 
    int size=history.size(); 
    if (history.size()>= 2) 
    { 
     history.remove(size-1); 
     setContentView(history.get(size-2)); 
    } 
    else 
    { 
     if(dialog==null) 
     { 
      createDialog(); 
     } 
     dialog.show(); 
    } 
} 
} 
在B.class

 public void nextPage() 
    { 
     Intent intent=new Intent(B.this,C.class); 
     intent.putExtra("name", productAdapter.getName(position)); 
     intent.putExtra("id", productAdapter.getID(position));  
     B.this.getParent().startActivityForResult(intent,11); 
    } 

    /* 
    * modify data in modifyItem 
    */ 
     public void handleActivityResult(int requestCode,int resultCode,Intent data) 
    { 
     String price=data.getExtras().getString("price"); 
     String name=data.getExtras().getString("name"); 
     String quantity=data.getExtras().getString("quantity"); 
     productAdapter.setName(name, modifyItem); 
     productAdapter.setPrice(price, modifyItem); 
     productAdapter.setQuantity(quantity, modifyItem); 
     productAdapter.notifyDataSetChanged(); 
    } 
在C.class

@Override 
public void onBackPressed() 
{ 
    if(price!=null) 
    { 
     Bundle bundle=new Bundle(); 
     bundle.putString("name",name); 
     bundle.putString("price",price); 
     bundle.putString("quantity",quantity); 

     this.getParent().setResult(RESULT_OK,new Intent().putExtras(bundle)); 
     this.finish(); 
     Log.e("C","inner"); 
    } 
    Log.e("C","outer"); 
    this.getParent().onBackPressed(); 
} 
+0

下面是解決方案。請試試這個 http://stackoverflow.com/a/15047518/1403112 –

回答

0

爲什麼你打完了?後退意味着它會破壞

+0

如果我從來沒有在Activity C中使用finish(),它不會在activityGroup.so中調用startActivityForResult()它不能修改Actvity B中的數據 – xiaodouya

相關問題