0
我一直用以下解決方案中心的活動標籤

(而不必訴諸於一個自定義標題在XML佈局):ClassCastException異常:ActionBarView不能轉換到TextView的

((TextView)((FrameLayout)((LinearLayout)((ViewGroup) getWindow().getDecorView()).getChildAt(0)).getChildAt(0)).getChildAt(0)).setGravity(Gravity.CENTER); 

這個偉大的工程,但每一次在一段時間我看到得到一個

java.lang.ClassCastException用戶(在谷歌播放)之一: com.android.internal.widget.ActionBarView不能轉換到 android.widget.TextView

這些可能是運行Android 3.x或更高版本的平板電腦用戶。

缺乏實現我自己的自定義標題,可以讓我直接訪問活動標籤,可以推薦另一種方法來避免該問題ActionBarViewTextView ClassCastException?

也許檢查應用程序當前運行的Android版本,並通過另一個級別getChildAt(0)

+0

所以這兩個答案是「正確的」:)選擇一個,我可以停止畏縮:) – Roloc 2012-08-16 16:16:28

回答

1

操作欄在主題中定義。所以如果你想避免這種情況出現,你需要選擇不同的主題。

或者,您可以檢測到用戶正在使用的操作系統版本,在11(Honeycomb)和更高版本的情況下,可以跳過操作欄並獲取下一個視圖。

這看起來像

if (Integer.valueOf(android.os.Build.VERSION.SDK) > 11) 
{ 
    ((TextView)((FrameLayout)((LinearLayout)((ViewGroup).getWindow().getDecorView()).getChildAt(1)).getChildAt(0)).getChildAt(0)).setGravity(Gravity.CENTER); 
} 
else 
    ((TextView)((FrameLayout)((LinearLayout)((ViewGroup).getWindow().getDecorView()).getChildAt(0)).getChildAt(0)).getChildAt(0)).setGravity(Gravity.CENTER); 

我也想補充像鯊魚說,這是一個總的黑客,也不是很健壯的代碼。您應該使用findViewById()來查找您的視圖並避免所有這些超級醜陋的投射。如果你繼續沿着這條路走下去,你可以期待你的黑客或者甚至是我剛剛投入的代碼在將來破解。

1
((FrameLayout)((LinearLayout)((ViewGroup) getWindow().getDecorView()).getChildAt(0)).getChildAt(0)).getChildAt(0) 

開始收集從這裏孩子的意見,並搜索自己的TextView ...你只需要跳過動作條,沒有必要將它很好,當你有黑客開始了呢。

+0

是啊,它有點痛心我只是粘在那裏,但我是誰判斷:) – Roloc 2012-08-16 16:10:32

+1

這是一個可怕的可怕解決方法,但嘿,如果它工作... :)我應該甚至問爲什麼findViewByID(R.whatever)不起作用? :)或者在你的特定文本視圖中附加一個標籤,並運行所有的視圖,直到你獲得它。 – Shark 2012-08-16 16:12:43

+1

@Roloc LOL我得到了提示。我不知道爲什麼我很害怕一個自定義標題... +1給你們兩個。 – 2012-08-16 16:13:56

相關問題