【问题标题】:One activity call dialog & return to previous activity一个活动调用对话框并返回到上一个活动
【发布时间】:2011-08-09 10:37:43
【问题描述】:

我的要求是一个活动正在调用另一个活动。当我单击父活动中销售路线列表中的单选按钮时,对话框(称为子项)将出现。包含表单。完成微小的表格工作后,它会去上一个地方(需要继续剩下的工作)。

我是这样做的:

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()吗?

请帮帮我...

我花了超过一天的时间......可能是小问题......

提前谢谢....

【问题讨论】:

  • 无法理解您在第 1 段中试图描述的内容。
  • 我的要求是一个活动正在调用另一个活动。当我单击父活动中销售路线列表中的单选按钮时,对话框(称为子项)将出现。包含表单。完成微小的表格工作后,它会去上一个地方(需要继续剩下的工作)。
  • 你的代码从哪里中断??
  • startActivityForResult(showContent, 2); & onActivityResult() 是个问题区...
  • 你检查我对你上一个问题的回答了吗???

标签: android


【解决方案1】:

您没有从意图传递任何值,因此请尝试删除意图并像这样使用:

setResult(RESULT_OK);

【讨论】:

    【解决方案2】:

    试试这个代码..

         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();
                 }
             });
    

    【讨论】:

    • 不。它没有工作....我调试了代码,它到了finish(),它没有到onActivityResult() mtd
    【解决方案3】:
    getParent().setResult(RESULT_OK, intent);
    

    这一行是might be 错误,因为getParent() 返回调用活动,实际上如果从另一个活动X 调用SalesRouteDevitionActivity 则返回那个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();
              }
    

    【讨论】:

      【解决方案4】:

      我已通过此链接完成此操作。

      startActivityForResult from ActivityGroup? .它对ActivityGroup中的startActivityForResult很有帮助

      【讨论】:

        【解决方案5】:

        我也遇到过类似的问题。我有一个 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?

        【讨论】:

          猜你喜欢
          • 2021-01-16
          • 1970-01-01
          • 2016-06-14
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多