2011-08-09 39 views
1

我的要求是一个活动正在调用另一个活动。当我在父活动中单击销售路线列表中的单选按钮时,会出现对话框(称为子对象)形成。完成微小的工作之后,它会转到上一个地方(需要继续工作)。One activity call dialog and return to previous activity

我做这样的:

AndroidManifest.xml中

<activity android:theme="@android:style/Theme.Light.Panel" android:name=".SalesRouteDevitionActivity" 
       android:label="Sales Route Diviation"> 
    </activity> 

然后我的销售路线的java部分名单是:

@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(v.getContext(),SalesRouteDevitionActivity.class); 
     int postion = position; 
     String aString = Integer.toString(postion); 
     bundle.putString("positon", aString); 
     showContent.putExtras(bundle); 
     startActivityForResult(showContent, 2); 


    }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) { 
     if(resultCode==Activity.RESULT_OK){ 
      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(); 
     } 

// super.onActivityResult(requestCode, resultCode, data); 
    } 

而且我的孩子的活动是:

 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 intent= new Intent(getApplicationContext(),SalesRouteActivity.class); 
      Log.i("*********" ," --- " +getParent()); 
      if (getParent() == null) { 
       setResult(RESULT_OK, intent); 
      } else { 
       getParent().setResult(RESULT_OK, intent); 
      } 
      finish(); 
     } 
    }); 
} 

我的问题是弹出完成活动后,它并没有去onActivityResult()方法

我有一个疑问,如果主题是@android:style/Theme.Dialog然后才能使用onActivityResult();

请帮我...

我花超过一天....可能是小问题....

enter image description here

在此先感谢....

+0

无法理解你正在尝试在1日对来形容。 –

+0

我的要求是一个活动正在调用另一个活动。当我单击父活动中的销售路线列表中的单选按钮时,对话框(即称为子对象)即将到来。该对话框包含表单。完成微小的工作之后,它会转到上一个地方(需要继续工作)。 – Piraba

+0

你的代码从哪里破坏? – Sandy

回答

0

你没有从意图中传递任何价值,所以尝试删除意图,并使用像这样:

setResult(RESULT_OK);

+0

没有工作。请帮助我 – Piraba

0

试试这个代码..

 button.setOnClickListener(new OnClickListener() { 
      public void onClick(View v) { 
       Intent intent= SalesRouteDevitionActivity.this.getIntent(); 
       Log.i("*********" ," --- " +getParent()); 
       if (getParent() == null) { 
        SalesRouteDevitionActivity.this.setResult(SalesRouteDevitionActivity.RESULT_OK, intent); 
       } else { 
SalesRouteDevitionActivity.this.getParent().setResult(SalesRouteDevitionActivity.RESULT_OK, intent); 
       } 
       finish(); 
      } 
     }); 
+0

号。它没有工作....我调试代码,它继续完成(),它没有去onActivityResult()mtd – Piraba

0
getParent().setResult(RESULT_OK, intent); 

这条线路是might be faluty,因为getParent()返回调用活动,实际上如果SalesRouteDevitionActivity从另一个活动则X返回X活性调用。但是由于该活动位于OnPause()中,并且正在侦听结果,因此您无法同时从相同的X活动设置结果,而是从SalesRouteDevitionActivity设置结果,然后完成结果。像

SalesRouteDevitionActivity.this.setResult(RESULT_OK, SalesRouteDevitionActivity.this.getIntent()); 
SalesRouteDevitionActivity.this.finish(); 

而且改写onActvityResult(),通过测试请求的代码然后结果代码...

@Override 
     protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
      Log.i("TEST ON RESULT", "SUCCESS"); 
      if(requestCode==2){ 

       if(resultCode==RESULT_OK) 
        Toast.makeText(this, "Reason has been successfully.", Toast.LENGTH_LONG).show(); 
      else 
        Toast.makeText(this, "Fail", Toast.LENGTH_LONG).show(); 
      } 
+0

我也试过这种方式也没有工作 – Piraba

0

非常有帮助我也有过类似的问题。我有一个ActivityGroup管理子活动。其中一项子活动称为类似的外部意图(在我的应用程序外部)。它从未在启动它的子活动中调用onActivityResult。

我终于想通了/记得这个问题是因为Android只会允许一个嵌套的子活动层......即,子活动不能嵌套子活动。为了解决这个问题:

call getParent().startActivityForResult() from your sub-activity 
your parent (the activitygroup) will be able to handle the onActivityResult. So I created a subclass of ActivityGroup and handled this onActivityResult. 
You can re-route that result back to the sub-activity if you need to. Just get the current activity by getLocalActivityManager().getCurrentActivity() . My sub-activities inherit from a custom activity so I added a handleActivityResult(requestCode, resultCode, data) in that subclass for the ActivityGroup to call. 

更多信息,请点击这里startActivityForResult from ActivityGroup?