2012-03-04 56 views
0

在我的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> 

任何提示都非常感谢!我知道这个问题已经在几个问题上得到解决,但是我的问题是它基本上可行。只在一个活动/视图中,而不在另一个活动/视图中。看来我错过了一些相当愚蠢的东西。

回答

0

我想通了的差异,如预期,这是一些很愚蠢:我忘了,显示面板不是runOnUiThread中的代码。我现在应该知道得更清楚了。

runOnUiThread(new Runnable() { 
    public void run() { 
     // code for showing the popup 
    } 
}); 

一面的问题:我得到了正确的轨道上,当我把一个try/catch块中的通话addView(...)。没有它就挂在那里而不会抛出错误(在LogCat中;我使用Eclipse)。有没有这样的错误默认显示的方式?谢谢!

相关问题