2013-07-23 86 views
0

我面臨的問題是當包含以下語句時,我的應用程序在啓動時崩潰並出現上述錯誤。LinearLayout無法投射到android.widget.checkbox

external= (CheckBox) menu.findItem(R.id.location).getActionView(); 

與該語句的代碼塊是

@Override 
public boolean onCreateOptionsMenu(Menu menu) 
{ 
    // TODO Auto-generated method stub 
    new MenuInflater(this).inflate(R.menu.actions,menu); 
    Log.d("Action","inflated"); 
    external= (CheckBox) menu.findItem(R.id.location).getActionView(); <<<error 
    Log.d("Action","external initialized"); 
    return super.onCreateOptionsMenu(menu); 
} 

外部是聲明爲

private CheckBox external=null; 

同一類的數據成員被充氣的菜單是:

<?xml version="1.0" encoding="utf-8"?> 
<menu xmlns:android="http://schemas.android.com/apk/res/android" > 
<item 
    android:id="@+id/location" 
    android:actionLayout="@layout/action_location" 
    android:showAsAction="never"> 

</item> 
<item 
    android:id="@+id/save" 
    android:title="Save" 
    android:showAsAction="always"> 

</item> 
<item 
    android:id="@+id/saveBackground" 
    android:showAsAction="always|withText" 
    android:title="in BG"> 

</item> 

如果該特定行被註釋掉,該應用程序啓動就好了。可能是什麼問題 ?

[更新]這裏的action_location.xml內容

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:orientation="vertical" > 
<CheckBox 
    android:id="@+id/external" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:title="@string/external" 
    /> 


</LinearLayout> 
+0

後action_location.xml – Blackbelt

+0

@blackbelt:我剛剛張貼的額外的代碼... – user2499998

+0

它是正確的ClassCastException異常。 getActionView返回此菜單項的當前設置的操作視圖 – Blackbelt

回答

0

getActionView()返回該菜單項當前設置的動作視圖。試試這個方法

View view = menu.findItem(R.id.location).getActionView(); 
CheckBox checkBox = view.findViewById(R.id.external); 
+0

代碼似乎現在正在工作。但是,當**屬性被設置爲**'android:showAsAction = always' **時,**複選框**將出現_only_。而且,在複選框旁邊沒有任何文字。任何想法可能是什麼原因? – user2499998

0

試試這個:

external= (CheckBox) menu.findItem(R.id.location).getActionView().getChildAt(0); 

這條線:

external= (CheckBox) menu.findItem(R.id.location).getActionView(); 

實際上得到家長的線性佈局。

0

getActionView讓你獲得佈局,而不是複選框。

嘗試

external= (CheckBox) menu.findItem(R.id.location) 
      .getActionView() 
      .findViewById(R.id.external);