2012-04-28 81 views
0

我修改别人的代码,只是想第四复选框添加到下面的对话框:为什么添加复选框到XML布局会导致java.lang.ClassCastException?

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:orientation="vertical"> 
<CheckBox 
    android:layout_marginLeft="20dp" 
    android:layout_marginRight="20dp" 
    android:layout_width="wrap_content" 
    android:text="@string/vinai_full" 
    android:checked="true" 
    android:id="@+id/cb_vinai" 
    android:layout_height="wrap_content"/> 
<CheckBox 
    android:layout_marginLeft="20dp" 
    android:layout_marginRight="20dp" 
    android:layout_width="wrap_content" 
    android:text="@string/suttan_full" 
    android:checked="true" 
    android:id="@+id/cb_suttan" 
    android:layout_height="wrap_content"/> 
<CheckBox 
    android:layout_marginLeft="20dp" 
    android:layout_marginRight="20dp" 
    android:layout_width="wrap_content" 
    android:text="@string/abhidum_full" 
    android:checked="true" 
    android:id="@+id/cb_abhidham" 
    android:layout_height="wrap_content"/> 
<Button 
    android:text="@string/ok" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:id="@+id/okcatebtn" 
    android:layout_marginTop="20dp" 
    android:layout_marginBottom="10dp" 
    android:layout_gravity="center" 
    /> 
</LinearLayout> 

第四复选框:

<CheckBox 
    android:layout_marginLeft="20dp" 
    android:layout_marginRight="20dp" 
    android:layout_width="wrap_content" 
    android:text="@string/etc_full" 
    android:checked="true" 
    android:id="@+id/cb_etc" 
    android:layout_height="wrap_content"/> 

当我添加它的APK编译罚款,但程序崩溃在启动时:

E/AndroidRuntime(1470): FATAL EXCEPTION: main 
E/AndroidRuntime(1470): java.lang.RuntimeException: Unable to start activity ComponentInfo{org.yuttadhammo.tipitaka/org.yuttadhammo.tipitaka.SelectBookActivity}: java.lang.ClassCastException: android.widget.Gallery 
E/AndroidRuntime(1470): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1647) 
E/AndroidRuntime(1470): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1663) 
E/AndroidRuntime(1470): at android.app.ActivityThread.access$1500(ActivityThread.java:117) 
E/AndroidRuntime(1470): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:931) 
E/AndroidRuntime(1470): at android.os.Handler.dispatchMessage(Handler.java:99) 
E/AndroidRuntime(1470): at android.os.Looper.loop(Looper.java:123) 
E/AndroidRuntime(1470): at android.app.ActivityThread.main(ActivityThread.java:3683) 
E/AndroidRuntime(1470): at java.lang.reflect.Method.invokeNative(Native Method) 
E/AndroidRuntime(1470): at java.lang.reflect.Method.invoke(Method.java:507) 
E/AndroidRuntime(1470): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839) 
E/AndroidRuntime(1470): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597) 
E/AndroidRuntime(1470): at dalvik.system.NativeStart.main(Native Method) 
E/AndroidRuntime(1470): Caused by: java.lang.ClassCastException: android.widget.Gallery 
E/AndroidRuntime(1470): at org.yuttadhammo.tipitaka.SelectBookActivity.onCreate(SelectBookActivity.java:586) 
E/AndroidRuntime(1470): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047) 
E/AndroidRuntime(1470): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1611) 
E/AndroidRuntime(1470): ... 11 more 

这是即使在启动时不会加载该对话框。如果我将第三个复选框替换为第四个复选框,则不会发生崩溃,所以它似乎因为某种原因而不能接受第四个元素。为什么会这样?

编辑:下面是导致该错误的代码,但我不明白它是如何相关的,因为它是指一个元素在不同的布局文件:

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 

    main = View.inflate(this, R.layout.main, null); 
    setContentView(main); 

    searchHistoryDBAdapter = new SearchHistoryDBAdapter(SelectBookActivity.this); 
    searchResultsDBAdapter = new SearchResultsDBAdapter(SelectBookActivity.this); 
    bookmarkDBAdapter = new BookmarkDBAdapter(SelectBookActivity.this); 

    Context context = getApplicationContext(); 
    prefs = PreferenceManager.getDefaultSharedPreferences(context); 

    MainTipitakaDBAdapter mainTipitakaDBAdapter = new MainTipitakaDBAdapter(this); 
    try { 
     mainTipitakaDBAdapter.open(); 
     if(mainTipitakaDBAdapter.isOpened()) { 
      mainTipitakaDBAdapter.close(); 
     } else { 
      startDownloader(); 
     } 
    } catch (SQLiteException e) { 
     Log.e ("Tipitaka","error:", e); 
     startDownloader(); 
    } 

    Resources res = getResources(); 
    final String [] cnames = res.getStringArray(R.array.category); 

    textInfo = (TextView) findViewById(R.id.text_info); 

和这里的主.XML:

<?xml version="1.0" encoding="utf-8"?> 

<ScrollView 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/ScrollView01" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:scrollbars="horizontal|vertical"> 
    <LinearLayout  
     android:id="@+id/LinearLayout01" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:orientation="vertical"> 

     <RelativeLayout 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_marginTop="10dp" 
      android:layout_gravity="center_horizontal" 
      android:padding="3dp" 
      android:id="@+id/about_header"> 

      <TextView 
       android:id="@+id/about_text_1" 
       android:layout_marginLeft="1dp" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:layout_toRightOf="@id/about_logo" 
       android:layout_centerVertical="true" 
       android:text="Android Tipitaka" 
       android:textSize="24sp" 
       android:textColor="@android:color/primary_text_dark_nodisable"/>  

     </RelativeLayout>  

     <View 
      android:background="@drawable/black_white_gradient" 
      android:layout_width="match_parent" 
      android:layout_marginTop="10dp" 
      android:layout_marginBottom="5dp" 
      android:layout_height="2dp"/> 
     <Gallery 
      android:layout_width="match_parent" 
      android:id="@+id/gallery_cate" 
      android:spacing="6dp" 
      android:gravity="center_vertical" 
      android:layout_height="60dp"/> 

     <TextView 
      android:id="@+id/book_label" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_gravity="center_horizontal" 
      android:text="@string/th_book_label" 
      android:textSize="17sp" 
     /> 

     <Gallery 
      android:id="@+id/gallery_ncate" 
      android:layout_width="match_parent" 
      android:layout_height="60dp" 
      android:gravity="center_vertical" 
      android:spacing="25dp" 

     /> 
     <TextView 
      android:id="@+id/text_info" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:lines="2" 
      android:layout_marginBottom="5dp" 
      android:layout_gravity="center_vertical|center_horizontal|center" 
      android:gravity="center_vertical|center_horizontal" 
      android:text="" 
      android:textSize="17sp" 
     /> 

     <RelativeLayout 
      android:layout_height="wrap_content" 
      android:layout_width="wrap_content" 
      android:id="@+id/main_buttons" 
      android:layout_gravity="center_horizontal"> 
      <Button 
       android:id="@+id/read_btn" 
       android:layout_width="85dp" 
       android:layout_height="wrap_content" 
       android:gravity="center_vertical|center_horizontal" 
       android:layout_gravity="center_vertical|center_horizontal|center" 
       android:text="@string/th_read" 
       android:textStyle="bold" 
       android:textSize="16dp" 
       android:layout_marginRight="40dp" 
      /> 
      <Button 
       android:id="@+id/search_btn" 
       android:text="@string/th_search" 
       android:layout_toRightOf="@id/read_btn" 
       android:layout_width="85dp" 
       android:layout_height="wrap_content" 
       android:gravity="center_vertical|center_horizontal" 
      android:layout_gravity="center_vertical|center_horizontal|center" 
       android:textStyle="bold" 
       android:textSize="16dp" 
      /> 
     </RelativeLayout> 

</LinearLayout> 
</ScrollView> 
+2

什么是SelectBookActivity.java:586包含 – 2012-04-28 04:50:11

+1

编辑后的代码SelectBookActivity.class – 2012-04-28 04:52:45

+0

谢谢,我已经添加了它,但我没有看到它是如何相关的......然后,我仍然在学习Java ... – yuttadhammo 2012-04-28 05:00:29

回答

1

textInfo = (TextView)your_layout.findViewById(R.id.text_info); 

代替

textInfo = (TextView)findViewById(R.id.text_info); 
+0

谢谢,但我敢肯定,这不是问题... text_info是在主布局中,但复选框是在启动,afaics不会调用的对话框中。再次,这只是添加第四个复选框到未调用的对话框的问题。 – yuttadhammo 2012-04-28 05:07:02

+1

@Yuttadhammo:我一步一步检查你的代码,因为你在这段代码中共享你没有问题可以发布其他部分的代码和完整的XML然后我们会发现确切的问题 – 2012-04-28 05:09:10

+0

谢谢;我应该添加哪部分代码?这是一个非常大的项目。整个项目在github上:https://github.com/ssutee/E-Tipitaka-for-Android,但我做了一些修改,所以它们也可能是问题所在。 – yuttadhammo 2012-04-28 05:13:50

0

确保当您使用

myContext.findViewById(R.id.cb_etc); 

将其分配给CheckBox对象。

CheckBox mCheckBox = (CheckBox) myContext.findViewById(R.id.cb_etc); 

注意:如果您使用的是其他布局,则需要使用该布局或布局的上下文来投射findViewBy标识。

+0

谢谢,我这样做是:\t \t \t \t \t布尔B4 =((复选框)cateDialog.findViewById(R.id.cb_etc))器isChecked();但是这个代码并没有在启动时运行,它只是一个搜索对话框,它是在点击按钮时触发的。 – yuttadhammo 2012-04-28 05:03:47

0

我也有同样的问题,如果text_info是在不同势布局,然后使用。但我在Linearlayout中添加了一个属性id

 <LinearLayout 
       xmlns:android="http://schemas.android.com/apk/res/android" 
       android:id="@+id/mainlayout" 
       android:layout_width="fill_parent" 
       android:layout_height="fill_parent" 
       android:orientation="vertical"> 

解决了。

+0

谢谢,这实际上帮助...但现在它引发下一行的错误:readBtn =(Button)findViewById(R.id.read_btn );因为read_btn也位于main.xml布局中,所以我对于问题是什么感到困惑。 – yuttadhammo 2012-04-28 05:39:44

+0

可以在这里发布main.xml的代码吗?因为需要查看read_btn的代码。 – AndroGeek 2012-04-28 05:47:13

+0

main.xml添加... – yuttadhammo 2012-04-28 12:10:20

0

实际上,答案竟然是运行ant clean - 问题是gen目录中有缓存文件导致设备混乱。

相关问题