2012-03-04 84 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)。有沒有這樣的錯誤默認顯示的方式?謝謝!

相關問題