在我的Android应用程序,我有一个活动为特色的GoogleMaps。在通知等情况下,我会显示一个弹出窗口。这工作都很好。不过,我也有另一项活动,我希望以相同的方式显示相同的信息。这个想法是在相应的视图(View2)中使用相同的弹出窗口。问题是,在第二个activity/view中,弹出窗口没有出现,并且代码似乎在group.addView(popup, lp);
处崩溃(虽然没有明确的错误;但是我确定没有任何null)。我只是没有看到两个活动/视图之间的本质区别,这可能表明为什么弹出窗口在一个视图中正常工作,而在另一个视图中却不起作用。在下面我显示相关的代码片段。安卓:编程添加视图的RelativeLayout
这是我如何实例化在这两个活动的弹出窗口。唯一的区别是第三个参数是指父视图的ID;在每种情况下都是RelativeLayout。
// GoogleMaps Activity
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.mapview);
[...]
this.popupPanel = new PopupPanel(this, R.layout.popup, R.id.relativeLayoutMap);
[...]
}
// View2 Activity
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.view2);
[...]
this.popupPanel = new PopupPanel(this, R.layout.popup, R.id.relativeLayoutView2);
[...]
}
这是初始化弹出窗口和显示的主要代码。只有值“parentViewID”在活动之间不同。
public PopupPanel(Activity activity, int layout, int parentViewID) {
this.activity = activity;
this.viewID = viewID;
ViewGroup parent = (ViewGroup) this.activity.findViewById(parentViewID);
this.popup = activity.getLayoutInflater().inflate(layout, parent, false);
}
public void show(boolean alignTop) {
RelativeLayout.LayoutParams lp=new RelativeLayout.LayoutParams(
RelativeLayout.LayoutParams.WRAP_CONTENT,
RelativeLayout.LayoutParams.WRAP_CONTENT
);
lp.addRule(RelativeLayout.ALIGN_PARENT_TOP);
ViewGroup group = (ViewGroup) this.activity.findViewById(this.viewID);
group.addView(popup, lp); // this 'crashes' for the View2 activity
group.invalidate();
}
最后,这里是相应布局的片段。在这两种情况下,我都指向一个RelativeLayout,我想放置弹出窗口。
<? xml version="1.0" encoding="utf-8"?>
<LinearLayout [...]>
<RelativeLayout [...] android:id="@+id/relativeLayoutMap">
<com.google.android.maps.MapView [...]/>
</RelativeLayout>
</LinearLayout>
对于活动/视图视图2:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout [...] android:id="@+id/relativeLayoutView2">
<LinearLayout [...] >
...
</LinearLayout>
<LinearLayout [...] >
...
</LinearLayout>
<ScrollView [...] >
<LinearLayout [...] >
...
</LinearLayout>
</ScrollView>
</RelativeLayout>
任何提示都非常感谢!我知道这个问题已经在几个问题上得到解决,但是我的问题是它基本上可行。只在一个活动/视图中,而不在另一个活动/视图中。看来我错过了一些相当愚蠢的东西。