2011-08-09 40 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?