2011-08-09 97 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