我在ActivityGroup的子活动中使用onClick处理程序时遇到了一些问题。
我正在使用启动StoreActivity
Intent storeIntent = new Intent(this, StoreActivity.class);
storeIntent.putExtra(StoreActivity.INTENT_STORE_ID, storeId);
View newVeiw = getLocalActivityManager().startActivity("StoreActivity", storeIntent).getDecorView();
setContentView(newVeiw);
Log.e("DEBUG", "current activity: " + getLocalActivityManager().getCurrentActivity().toString());
在StoreActivity布局中,我有一个定义onClick方法的按钮。然而,由于某种原因,它正试图在启动StoreActivity的父类中调用它。启动活动时我是否做错了什么?上面Log.e的输出说StoreActivity是当前的活动,所以我有点不知道为什么会发生这种情况。我可以通过在StoreActivity中的代码中为按钮定义onClickListener来解决这个问题,但如果可能的话,我希望避免这种情况。
我认为这是因为您从父活动而不是子活动调用setContentView。为什么不直接在意图中启动活动,并在新活动中设置内容视图呢?这会简单得多。
试试这个:
Intent storeIntent = new Intent(this, StoreActivity.class);
storeIntent.putExtra(StoreActivity.INTENT_STORE_ID, storeId);
startActivity(storeIntent);
然后在StoreActivity.java do:中
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
View newVeiw = getLocalActivityManager().startActivity("StoreActivity", storeIntent).getDecorView();
setContentView(newView); //not sure if this would work, would probably be easier to put your xml layout file in here.
}
好的,我已经解决了这个问题。该问题与此代码无关。我的活动有一个共同的基类,因为我不小心把充气器变成了一个单体。这意味着所有膨胀的布局都属于创建该单例实例的第一个类,而该实例恰好是错误接收onClick事件的类。删除该单例解决了此问题。