2016-05-18 4 views
2

В Android Studio, когда я пытаюсь запустить мой проект я получаю ClassCastException следующим образом:ClassCastException от просмотра объектов в андроиде студии

Caused by: java.lang.ClassCastException: android.widget.EditText cannot be cast to android.widget.RelativeLayout

когда Посмотреть объект 100% RelativeLayout и не EditText. Проблема возникает в другом элементе View, если я прокомментирую вышеуказанный код.

Я пробовал очистить и перестроить проект, я попытался редактировать файл XML и изменить идентификатор, я попытался удалить XML файл и перезапустить Android Studio, а затем создать новый XML-файл, все это безрезультатно.

Благодарим за помощь.

EDIT Когда я добавить новые виды на XML, с идентификатором, который я никогда не использовал, как-то деятельность, прежде чем она получает аннулирует по своему собственному (и совершенно отдельному) файлу XML .. это странно, потому что Там нет причины почему простой взгляд на другой файл XML должен воздействовать на другой XML, который загружается еще до него ..

EDIT2 Я осмотрел View rl = activityView.findViewById(R.id.notification); и выяснил, что она получает etMessage, которое другой вид элемента в том же XML и является infact a EditText вид типа.

кода до возникновения исключения:

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

private void setInitialView() { 
    RelativeLayout frame = (RelativeLayout) findViewById(R.id.activity_frame); 
    LayoutInflater layoutInflater = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    View activityView = layoutInflater.inflate(R.layout.chat, null,false); 
    frame.removeAllViews(); 
    frame.addView(activityView); 

    chatMap.put("Public", new ArrayList<ChatMessageBox>()); 

    // move the notification layout outside the screen 
    RelativeLayout rl = (RelativeLayout) findViewById(R.id.notification); 
    TranslateAnimation moveAnim = new TranslateAnimation(
      TranslateAnimation.ABSOLUTE, 0, TranslateAnimation.ABSOLUTE, 0, 
      TranslateAnimation.RELATIVE_TO_SELF, 0, TranslateAnimation.RELATIVE_TO_SELF, -1); 
    moveAnim.setDuration(0); 
    moveAnim.setFillAfter(true); 
    rl.startAnimation(moveAnim); 
} 

Этой деятельность родительской XML, который загружается с setContentView в OnCreate:

<?xml version="1.0" encoding="utf-8"?> 
<!-- Making the drawer layout the root view --> 
<android.support.v4.widget.DrawerLayout 
xmlns:android="http://schemas.android.com/apk/res/android" 
android:id="@+id/drawer_layout" 
android:layout_width="match_parent" 
android:layout_height="match_parent"> 
<!-- MAIN CONTENT --> 

<RelativeLayout 
xmlns:android="http://schemas.android.com/apk/res/android" 
android:id="@+id/activity_frame" 
android:layout_width="wrap_content" 
android:layout_height="wrap_content" > 

</RelativeLayout> 


<!-- The ListView to be displayed when the drawer layout is active --> 
<ListView android:id="@+id/left_drawer" 
    android:layout_width="240dp" 
    android:layout_height="match_parent" 
    android:layout_gravity="start" 
    android:choiceMode="singleChoice" 
    android:divider="@android:color/transparent" 
    android:dividerHeight="0dp" 
    android:background="#111"/> 
</android.support.v4.widget.DrawerLayout> 

И XML, который имеет соответствующий вид:

<?xml version="1.0" encoding="utf-8"?> 
<!-- Making the drawer layout the root view --> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:android1="http://schemas.android.com/apk/res/android" 
android:id="@+id/chat_relative_layout" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
> 

<ScrollView 
    android:id="@+id/scroller" 
    android:layout_width="wrap_content" 
    android:layout_height="fill_parent" 
    android:layout_above="@+id/bSendMessage" 
    android:layout_alignParentLeft="true" 
    android:layout_alignParentRight="true" 
    android:background="@drawable/chat_bg" > 

    <LinearLayout 
     android:id="@+id/chatWindowContainer" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:orientation="vertical" > 
    </LinearLayout> 
</ScrollView> 

<Button 
    android:id="@+id/bSendMessage" 
    android:layout_width="40dp" 
    android:layout_height="40dp" 
    android:layout_alignParentBottom="true" 
    android:layout_alignParentRight="true" 
    android:background="@drawable/ic_send" /> 

<EditText 
    android:id="@+id/etMessage" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_alignParentBottom="true" 
    android:layout_alignParentLeft="true" 
    android:layout_alignTop="@+id/bSendMessage" 
    android:layout_toLeftOf="@+id/bSendMessage" 
    android:paddingLeft="10dp" 
    android:background="@drawable/text" 
    android:textColor="#000000" 
    android:imeOptions="actionNone" 
    android:inputType="textMultiLine" 
    android:maxLines="4" 
    android:singleLine="true" 
    android:layout_alignParentRight="false" 
    android:layout_alignWithParentIfMissing="false" /> 

    <!-- the desired element --> 
<RelativeLayout 
    android:id="@+id/notification" 
    android:layout_width="fill_parent" 
    android:layout_height="30dp" 
    android:layout_alignParentLeft="true" 
    android:layout_alignParentTop="true" 
    android:background="@drawable/bg_upload" 
    > 

    <TextView 
     android:id="@+id/tvNotification" 
     android:layout_gravity="center" 
     android:text="New Message Recieved" 
     android:textAppearance="?android:attr/textAppearanceLarge" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentBottom="true" 
     android:layout_centerHorizontal="true" 
     android:textColor="#000000" /> 

</RelativeLayout> 

</RelativeLayout> 

Журнал ошибок:

java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.raad/com.example.raad.activities.ChatActivity}: java.lang.ClassCastException: android.widget.EditText cannot be cast to android.widget.RelativeLayout 
            at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2351) 
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2403) 
            at android.app.ActivityThread.access$600(ActivityThread.java:165) 
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1373) 
            at android.os.Handler.dispatchMessage(Handler.java:107) 
            at android.os.Looper.loop(Looper.java:194) 
            at android.app.ActivityThread.main(ActivityThread.java:5391) 
            at java.lang.reflect.Method.invokeNative(Native Method) 
            at java.lang.reflect.Method.invoke(Method.java:525) 
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:833) 
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:600) 
            at dalvik.system.NativeStart.main(Native Method) 
            Caused by: java.lang.ClassCastException: android.widget.EditText cannot be cast to android.widget.RelativeLayout 
            at com.example.raad.activities.ChatActivity.setInitialView(ChatActivity.java:336) 
            at com.example.raad.activities.ChatActivity.onCreate(ChatActivity.java:43) 
            at android.app.Activity.performCreate(Activity.java:5122) 
            at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1146) 
            at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2315) 
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2403)  
            at android.app.ActivityThread.access$600(ActivityThread.java:165)  
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1373)  
            at android.os.Handler.dispatchMessage(Handler.java:107)  
            at android.os.Looper.loop(Looper.java:194)  
            at android.app.ActivityThread.main(ActivityThread.java:5391)  
            at java.lang.reflect.Method.invokeNative(Native Method)  
            at java.lang.reflect.Method.invoke(Method.java:525)  
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:833)  
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:600)  
            at dalvik.system.NativeStart.main(Native Method) 
+0

Почтовый код в вашей деятельности или фрагменте или место, где используется findViewById –

+0

Опубликуйте свой код и журнал ошибок –

+0

Его в onCreate, и перед этим ничего не происходит, поэтому код не имеет значения. –

ответ

0

Измените ваш OnCreate так:

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.yourLayoutXmlName); 
    setInitialView(); 
} 

Edit:

Попробуйте изменить эту строку:

RelativeLayout rl = (RelativeLayout) findViewById(R.id.notification); 

в

RelativeLayout rl = (RelativeLayout) activityView.findViewById(R.id.notification); 

Надеюсь, это поможет вам.

+0

Я не хочу setContentView, потому что этот макет загружается в другой макет, помните первые строки в setInitialView –

+0

Попробуйте отредактированный ответ –

+0

Я сделал, он ничего не меняет. –

0
R.id.activity_frame 

не существует в вашем XML-файле. Попытайтесь решить эту проблему. И напишите полный код.

+0

activity_frame находится в другом xml, который загружается родителем этого объекта, setContentView в onCreate, и этот xml добавляется в этот Activity_frame –

+0

@TomerSomething R.id.notification проверяет этот идентификатор в файле R.java, он может ссылаться на edittext ранее. – UserSharma

1

Проблема была, вероятно, в кэше приложения в самом устройстве. Я запускал приложение на другом устройстве, и не было никаких проблем, поэтому я очистил данные и кеш с устройства (Настройки -> Приложения) и удалил приложение (просто удаление не работало), и теперь оно работает.

Смежные вопросы