2011-08-09 98 views
3

如何等待另一個活動導致android。 我寫了下面的代碼,但活動完成後,它總是去onCreate()方法。Android等待另一個活動結果 - 它沒有工作

我有標籤activity.From一個選項卡活動,我叫另一項活動,即彈出窗口......完成後彈出窗口應該回到以前的活動

@Override 
protected void onListItemClick(ListView l, View v, int position, long id) { 
    super.onListItemClick(l, v, position, id); 
    Object o = this.getListAdapter().getItem(position); 
    keyword = o.toString(); 
    positions = position; 

    if(position != 0){ 
     Bundle bundle = new Bundle(); 

     Intent showContent = new Intent(getApplicationContext(),SalesRouteDevitionActivity.class); 
     int postion = position; 
     String aString = Integer.toString(postion); 
     bundle.putString("positon", aString); 
     showContent.putExtras(bundle); 
     startActivityForResult(showContent,0); 
    }else{ 

     Intent intent = new Intent(SalesRouteActivity.this, ListRetailerActivity.class); 
     Bundle bundle = new Bundle(); 
     bundle.putString("RouteName", keyword); 
     intent.putExtras(bundle); 
     View view = SalesActivityGroup.group.getLocalActivityManager().startActivity("", intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)).getDecorView(); 
     SalesActivityGroup.group.replaceView(view); 
    } 
} 


    @Override 
    protected void onActivityResult(int requestCode, int resultCode, Intent data) { 

     Log.w("onActivityResult" ," --requestCode ---" + requestCode + " -- resultCode -- " + resultCode + " -- data --" + data); 
     if(resultCode==0){ 
      Toast.makeText(this, "Reason has been successfully.", Toast.LENGTH_LONG).show(); 
      if(resultCode==RESULT_OK) 
       Toast.makeText(this, "Reason has been successfully.", Toast.LENGTH_LONG).show(); 
     else 
       Toast.makeText(this, "Fail", Toast.LENGTH_LONG).show(); 
     } 
    } 

和SalesRouteDevitionActivity.class

public class SalesRouteDevitionActivity extends Activity { 
private String array_spinner[]; 
String param1 = ""; 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.route_diviation_popup); 
    array_spinner=new String[2]; 
    array_spinner[0]="Rain"; 
    array_spinner[1]="Floods"; 

    Spinner s = (Spinner) findViewById(R.id.spinner1); 
    ArrayAdapter adapter = new ArrayAdapter(this, android.R.layout.simple_spinner_dropdown_item, array_spinner); 
    s.setAdapter(adapter); 
    Button button = (Button) findViewById(R.id.submit); 

    button.setOnClickListener(new OnClickListener() { 
     public void onClick(View v) { 


      Intent mIntent = new Intent(); 
      setResult(RESULT_OK); 
      finish(); 



     } 
    }); 

} 

} 

這是我的標籤Activity.I正在使用的ActivityGroup

public class MainActivity extends TabActivity { 
int selectedTab; 
TabHost tabHost ; 

public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.tabview); 

    TabHost t = getTabHost(); 
    tabHost = (TabHost)findViewById(android.R.id.tabhost); 

    TabSpec firstTabSpec = tabHost.newTabSpec("tid1"); 
    TabSpec secondTabSpec = tabHost.newTabSpec("tid1"); 
    TabSpec thirdTabSpec = tabHost.newTabSpec("tid1"); 
    /** TabSpec setIndicator() is used to set name for the tab. */ 
    /** TabSpec setContent() is used to set content for a particular tab. */ 
    firstTabSpec.setIndicator("Sales").setContent(new Intent(this,SalesActivityGroup.class)); 
    secondTabSpec.setIndicator("Admin").setContent(new Intent(this,SettingActivityGroup.class)); 
    thirdTabSpec.setIndicator("Setting").setContent(new Intent(this,SettingActivityGroup.class)); 


    tabHost.addTab(firstTabSpec); 
    tabHost.addTab(secondTabSpec); 
    tabHost.addTab(thirdTabSpec); 
    tabHost.setCurrentTab(0); 
    tabHost.setMinimumHeight(25); 
} 

public void onTabChanged(String arg0) { 
     selectedTab = tabHost.getCurrentTab(); 

} 

這是SalesActivityGroup.java

public class SalesActivityGroup extends ActivityGroup { 

public static SalesActivityGroup group; 
private ArrayList<View> history; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    this.history = new ArrayList<View>(); 
    group = this; 

    View view = getLocalActivityManager().startActivity("Sales", 
      new Intent(this, SalesRouteActivity.class).addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)) 
      .getDecorView(); 

    replaceView(view); 

} 

public void replaceView(View v) { 
    history.add(v); 
    setContentView(v); 

} 

public void back() { 
    if (history.size() > 0) { 
     history.remove(history.size() - 1); 
     if (history.size() > 0) { 
      setContentView(history.get(history.size() - 1)); 
     } else { 
      finish(); 
     } 
    } else { 
     finish(); 
    } 
} 

@Override 
public void onBackPressed() { 
    SalesActivityGroup.group.back(); 
    return; 
} 

}

我知道這是我們應該做的方式,但我真的不知道爲什麼它不工作我而言....

我沒去onActivityResult()方法&它沒有打印Log

請幫助我..

在此先感謝

+1

我得到了解決辦法從這裏的http:/ /stackoverflow.com/questions/4268178/startactivityforresult-from-activitygroup – Piraba

回答

1

如果使用標籤的ActivityGroup那麼應該這樣使用:

調用活動:

Intent showContent = new Intent(botton.getContext(),RetailerOrderEActivity.class); 
getParent().startActivityForResult(showContent, 2); 

考慮getParent(),如果是標籤的ActivityGroup然後調用類的。

和兒童活動:

Intent i = new Intent(); 
    Bundle bundle = new Bundle(); 
    i.putExtras(bundle); 
    setResult(Activity.RESULT_OK, i); 
    finish(); 

完成後,這將去的ActivityGroup類:

有你想這樣的呼籲:

protected void onActivityResult(int requestCode, int resultCode, Intent data) { 

    if(requestCode ==1){ 
     Bundle bundle = data.getExtras(); 
     String roteCode = bundle.getString("RouteCode"); 
     Intent intent = new Intent(SalesActivityGroup.this,ListRetailerActivity.class); 
     bundle.putString("RouteCode", roteCode); 
     intent.putExtras(bundle); 
     View view = SalesActivityGroup.group.getLocalActivityManager().startActivity("",intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)).getDecorView(); 
     SalesActivityGroup.group.replaceView(view); 
    } 
    } 
3

在Android中沒有控制檯。所以System.out.println將無法​​正常工作。出於調試目的,您可以使用LogCatHere's how to use LogCat

+0

感謝提供信息 – Piraba

+0

不客氣。請不要忘記投票:-) – sparkymat

+0

@sparkymat'System.out.println'在Log.i –

3

你不需要調用

super.onActivityResult(requestCode, resultCode, data); 

,當你正在處理ActivityResult。

與Log.i替換您的System.out.println

+0

我已更新代碼,但它沒有工作 – Piraba

+0

刪除super.onActivityResult(requestCode,resultCode,data);從方法 – PravinCG

+0

我評論那部分。即使不去那個地方 – Piraba

4

從SalesRouteDevitionActivity.class
刪除startActivity(showContent); 編輯:

Intent resultIntent = new Intent(); 
setResult(Activity.RESULT_OK, resultIntent); 
finish(); 
+0

編號我也試過這也。我沒有去的活動結果()方法 – Piraba

+0

我評論說部分。即使不去那個地方 – Piraba

+0

我已編輯。請嘗試這個 – Sandy

3

與此

替換此

if(resultCode==0) 

if(requestCode==0) 
+0

這不工作...請幫助我 – Piraba