【问题标题】:startActivityForResult doesn't seem to call onActivityResultstartActivityForResult 似乎没有调用 onActivityResult
【发布时间】:2011-10-04 09:01:54
【问题描述】:

当用户单击它要调用对话框的按钮时-该对话框包含 ListView 中的产品列表。用户选择产品后,它应该进入上一个活动。

我已经使用startActivityForResult ()

有一些问题。我的呼叫活动是正常的选项卡活动,而不是选项卡活动组中的正常选项卡活动。

实际上我想在下拉(Spinner)中做。在我的扫描仪中我无法获得上下文。它给了Android Spinner Error : android.view.WindowManager$BadTokenException: Unable to add window

所以我对我的设计进行了这样的更改:当用户单击按钮时,它会在 ListView 中加载产品列表。选择产品后,它会返回之前的活动。

This is my previous question : link

这里调用活动:

  //Click Product button
   l_prod.setOnClickListener(new OnClickListener() {
       public void onClick(View v) {
            Intent showContent = new Intent(LineDiscountActivity.this,ListProductActivity.class);
            Bundle bundle = new Bundle();
            bundle.putString("Activity", "LineDiscountActivity");
            bundle.putString("RetailerName", retailerName);
            bundle.putString("RetailerCode", retailerCode);
            showContent.putExtra("discountProduct", discountList);
            showContent.putExtras(bundle);
            getParent().startActivityForResult(showContent, 5);
       }
   });

还有我的接收器活动:

  @Override
  protected void onListItemClick(ListView l, View v, int position, long id) {
        super.onListItemClick(l, v, position, id);
            Object o = this.getListAdapter().getItem(position);
            String book = o.toString();
            Intent i = new Intent();
            Bundle bundle = new Bundle();
            bundle.putString("Activity", "ListProductActivity");
            bundle.putString("RetailerName", retailerName);
            bundle.putString("RetailerCode", retailerCode);
            bundle.putString("seletcedProductCode", products.get(position).getProductCode());
            bundle.putString("seletcedProductName", products.get(position).getDescription());
            bundle.putDouble("seletcedProductQty", products.get(position).getAvailableQuantity());
            i.putExtra("discountProduct", discountList);
            i.putExtras(bundle);
            if (getParent() == null) {
                setResult(Activity.RESULT_OK, i);
            } else {
                getParent().setResult(Activity.RESULT_OK, i);
            }
            ListProductActivity.this.finish(); 

    }

并调用活动

 @Override
protected  void onActivityResult(int requestCode, int resultCode, Intent data) {
//  super.onActivityResult(requestCode, resultCode, data);
    Log.i("-requestCode from LineDisocunt--" ,"" + requestCode);

}

我已经在调用 Activity 和 Tab main Activity 中编写了这段代码(onActivityResult)。

我没有去任何地方..

onActivityResult mehtod。但它没有成功。

我的代码有什么问题。

如果有人知道,请告诉我...

提前致谢

【问题讨论】:

  • 您是否将此活动作为清单中的单任务活动?如果是,则 onactivity 结果将不起作用。
  • 我在清单文件中编写了活动,例如 '' .我不明白什么是单任务活动。?请帮帮我
  • 如果你没有写 android:launchMode="singleTask" 那么它应该可以工作..检查这个例子saigeethamn.blogspot.com/2009/08/…

标签: android


【解决方案1】:

当我将startActivityForResult()activity group 一起使用时,我遇到了同样的问题。

您的活动结果将进入您的活动组。您不会在第一个活动中获得活动结果

因此,您可以通过在第一个活动中获取一个公共静态对象来解决此问题,当您调用第二个活动时,您必须从第二个活动分配您的第一个活动对象。然后完成第二个活动,以便您的第一个活动将恢复并您可以通过在第一个活动中覆盖onResume() 方法来更新您的用户界面。您必须检查是否分配了您的对象的验证天气。

例如

您的第一个活动中有一个静态对象产品

第一个活动

public static Product product;
start second activity
startactivity(this, SecondActivity.class);

don't finish First Activity

您必须覆盖onResume() 方法,然后才能使用由第二个活动分配的产品对象

第二次活动

FirstActivity.product.setName(name);
FirstActivity.product.setPrice(price);

分配产品对象后,您必须完成第二个活动 喜欢

finish()

编辑

我得到了你的 badTokenException 问题的解决方案

解决办法

CLICK HERE

【讨论】:

  • 很抱歉,在整个应用程序中使用静态变量不是解决方案!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-21
  • 2012-08-27
  • 1970-01-01
  • 2012-11-29
  • 2014-08-11
相关资源
最近更新 更多