2011-10-04 88 views
3

当用户点击按钮时,它想要调用对话框 - 该对话框包含ListView中的产品列表。用户选择产品后,它应该进入高级活动。startActivityForResult似乎没有调用onActivityResult

我已经使用startActivityForResult()

存在一些问题。我的调用活动是在正常选项卡活动中,选项卡活动组中的正常选项卡活动。

Actualy我想在drrop下来(微调)。在我scanerio我不能让context.It awalys给Android Spinner Error : android.view.WindowManager$BadTokenException: Unable to add window

所以,我必须改变我的设计是这样做的:当用户点击buttion它加载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); 

} 

我写个代码(onActivityResult)在调用活动& Tab主Activty也。

我没有去..

onActivityResult mehtod.But没去了。

我的代码有什么问题。

请让我知道,如果有人知道这个...

在此先感谢

+0

您是否将此活动作为清单中的单个任务活动?如果是,那么活动结果将不起作用。 – Andy

+0

我已经在清单文件中写入了这样的活动: '。我无法得到它是单一的任务活动。请帮我 – Piraba

+0

如果你没有写android:launchMode =“singleTask”那么它应该是工作..检查这个例子http://saigeethamn.blogspot.com/2009/08/android-developer-tutorial-for_31.html – Andy

回答

6

我有同样的问题,我是用startActivityForResult()activity group时。

您的活动的结果会去你的活动group.You在你的第一个活动不会得到活动结果

所以,你可以通过一个公共静态对象在你的第一个活动解决这个问题,当你调用第二个活动,你必须从第二个活动分配你的第一个活动对象,然后完成第二个活动,这样你的第一个活动就会恢复,你可以通过在第一个activity中重写onResume()方法来更新你的UI。你必须检查你的对象被赋值的验证天气或不。

例如

你在你的第一个活动

第一次活动有一个静态对象产品

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

+0

谢谢。您节省了我的时间 – Piraba

+0

对不起,但在整个应用程序中使用静态变量不是解决方案! – Leo