2017-07-04 1 views
-3

J'avais une vue de recycleur pour laquelle j'ai une disposition linéaire en tant que parent et une disposition relative en tant qu'enfant. Je change les params de disposition à ceux dynamiquement. Mon code fonctionne plutôt bien pour la mise en page linéaire mais quand il s'agit de mise en page relative, il plante.RelativeLayout.LayoutParams causant le plantage de l'application en android

Il ne montre même pas le numéro de ligne qui provoque le plantage et après tant de courses j'ai trouvé la ligne qui provoque le crash. C'est la classe de l'adaptateur de vue recycleur.

@Override 
    public void onBindViewHolder(Holder holder, int position) { 
     ChatListItem listItem = listdata.get(position); 
     LinearLayout parent=holder.parent; 
     RelativeLayout chatView=holder.relLayout; 
     holder.time.setText(listItem.time); 
     holder.message.setText(listItem.message); 
     if (!listItem.sentByCustomer) { 
      int match_parent= LinearLayout.LayoutParams.MATCH_PARENT; 
      int wrap_content= LinearLayout.LayoutParams.WRAP_CONTENT; 
      chatView.setBackground(context.getResources().getDrawable(R.drawable.incoming_normal)); 

      LinearLayout.LayoutParams parentParams=new LinearLayout.LayoutParams(match_parent,wrap_content); 
      parentParams.setMarginStart(5); 
      parent.setLayoutParams(parentParams); 

      int rel_wrap_content=RelativeLayout.LayoutParams.WRAP_CONTENT; 
      RelativeLayout.LayoutParams relParams=new RelativeLayout.LayoutParams(rel_wrap_content,rel_wrap_content); 
      relParams.setMarginEnd(50); 




      chatView.setLayoutParams(relParams); // This line is causing crash 



     } 
    } 



    class Holder extends RecyclerView.ViewHolder { 
     LinearLayout parent; 
     RelativeLayout relLayout; 
     TextView message, time; 

     public Holder(View itemView) { 
      super(itemView); 
      parent=(LinearLayout)itemView.findViewById(R.id.chat_view_parent); 
      relLayout = (RelativeLayout) itemView.findViewById(R.id.customer_chat_view); 
      message = (TextView) itemView.findViewById(R.id.customer_chat_message); 
      time = (TextView) itemView.findViewById(R.id.chat_time); 
     } 
    } 
} 

Tout est bien la mise en page params appartiennent à params de disposition relative et je les mettre à la disposition relative et je l'ai également vérifié le a contre fichier xml et que l'on est également une disposition relative. Le journal des erreurs indique toujours qu'il ne peut pas convertir les paramètres de disposition linéaire en params de disposition relative. Même le débogueur le dit comme mise en page relative, mais pourquoi ai-je l'erreur? Voici l'erreur log

07-04 15:09:13.609 5441-5441/com.motowala E/UncaughtException: java.lang.ClassCastException: android.widget.RelativeLayout$LayoutParams cannot be cast to android.widget.LinearLayout$LayoutParams 
                    at android.widget.LinearLayout.measureHorizontal(LinearLayout.java:1071) 
                    at android.widget.LinearLayout.onMeasure(LinearLayout.java:642) 
                    at android.view.View.measure(View.java:19861) 
                    at android.support.v7.widget.RecyclerView$LayoutManager.measureChildWithMargins(RecyclerView.java:8636) 
                    at android.support.v7.widget.LinearLayoutManager.layoutChunk(LinearLayoutManager.java:1577) 
                    at android.support.v7.widget.LinearLayoutManager.fill(LinearLayoutManager.java:1511) 
                    at android.support.v7.widget.LinearLayoutManager.onLayoutChildren(LinearLayoutManager.java:570) 
                    at android.support.v7.widget.RecyclerView.dispatchLayoutStep2(RecyclerView.java:3583) 
                    at android.support.v7.widget.RecyclerView.dispatchLayout(RecyclerView.java:3312) 
                    at android.support.v7.widget.RecyclerView.onLayout(RecyclerView.java:3844) 
                    at android.view.View.layout(View.java:17641) 
                    at android.view.ViewGroup.layout(ViewGroup.java:5575) 
                    at android.widget.RelativeLayout.onLayout(RelativeLayout.java:1079) 
                    at android.view.View.layout(View.java:17641) 
                    at android.view.ViewGroup.layout(ViewGroup.java:5575) 
                    at android.widget.FrameLayout.layoutChildren(FrameLayout.java:323) 
                    at android.widget.FrameLayout.onLayout(FrameLayout.java:261) 
                    at android.view.View.layout(View.java:17641) 
                    at android.view.ViewGroup.layout(ViewGroup.java:5575) 
                    at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1741) 
                    at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1585) 
                    at android.widget.LinearLayout.onLayout(LinearLayout.java:1494) 
                    at android.view.View.layout(View.java:17641) 
                    at android.view.ViewGroup.layout(ViewGroup.java:5575) 
                    at android.widget.FrameLayout.layoutChildren(FrameLayout.java:323) 
                    at android.widget.FrameLayout.onLayout(FrameLayout.java:261) 
                    at android.view.View.layout(View.java:17641) 
                    at android.view.ViewGroup.layout(ViewGroup.java:5575) 
                    at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1741) 
                    at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1585) 
                    at android.widget.LinearLayout.onLayout(LinearLayout.java:1494) 
                    at android.view.View.layout(View.java:17641) 
                    at android.view.ViewGroup.layout(ViewGroup.java:5575) 
                    at android.widget.FrameLayout.layoutChildren(FrameLayout.java:323) 
                    at android.widget.FrameLayout.onLayout(FrameLayout.java:261) 
                    at com.android.internal.policy.DecorView.onLayout(DecorView.java:728) 
                    at android.view.View.layout(View.java:17641) 
                    at android.view.ViewGroup.layout(ViewGroup.java:5575) 
                    at android.view.ViewRootImpl.performLayout(ViewRootImpl.java:2346) 
                    at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2068) 
                    at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1254) 
                    at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:6343) 
                    at android.view.Choreographer$CallbackRecord.run(Choreographer.java:874) 
                    at android.view.Choreographer.doCallbacks(Choreographer.java:686) 
                    at android.view.Choreographer.doFrame(Choreographer.java:621) 
                    at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:860) 
                    at android.os.Handler.handleCallback(Handler.java:751) 
                    at android.os.Handler.dispatchMessage(Handler.java:95) 
                    at android.os.Looper.loop(Looper.java:154) 
                    at android.app.ActivityThread.main(ActivityThread.java:6176) 
                    at java.lang.reflect.Method.invoke(Native Method) 
                    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:888) 
                    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:778) 
07-04 15:09:13.613 5441-5502/com.motowala D/FA: Logging event (FE): _ae, Bundle[{_o=crash, _sc=CustomerChatActivity, _si=6120152536016377641, timestamp=1499161153609, fatal=1}] 
07-04 15:09:13.906 5441-5441/com.motowala E/AndroidRuntime: FATAL EXCEPTION: main 
                  Process: com.motowala, PID: 5441 
                  java.lang.ClassCastException: android.widget.RelativeLayout$LayoutParams cannot be cast to android.widget.LinearLayout$LayoutParams 
                   at android.widget.LinearLayout.measureHorizontal(LinearLayout.java:1071) 
                   at android.widget.LinearLayout.onMeasure(LinearLayout.java:642) 
                   at android.view.View.measure(View.java:19861) 
                   at android.support.v7.widget.RecyclerView$LayoutManager.measureChildWithMargins(RecyclerView.java:8636) 
                   at android.support.v7.widget.LinearLayoutManager.layoutChunk(LinearLayoutManager.java:1577) 
                   at android.support.v7.widget.LinearLayoutManager.fill(LinearLayoutManager.java:1511) 
                   at android.support.v7.widget.LinearLayoutManager.onLayoutChildren(LinearLayoutManager.java:570) 
                   at android.support.v7.widget.RecyclerView.dispatchLayoutStep2(RecyclerView.java:3583) 
                   at android.support.v7.widget.RecyclerView.dispatchLayout(RecyclerView.java:3312) 
                   at android.support.v7.widget.RecyclerView.onLayout(RecyclerView.java:3844) 
                   at android.view.View.layout(View.java:17641) 
                   at android.view.ViewGroup.layout(ViewGroup.java:5575) 
                   at android.widget.RelativeLayout.onLayout(RelativeLayout.java:1079) 
                   at android.view.View.layout(View.java:17641) 
                   at android.view.ViewGroup.layout(ViewGroup.java:5575) 
                   at android.widget.FrameLayout.layoutChildren(FrameLayout.java:323) 
                   at android.widget.FrameLayout.onLayout(FrameLayout.java:261) 
                   at android.view.View.layout(View.java:17641) 
                   at android.view.ViewGroup.layout(ViewGroup.java:5575) 
                   at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1741) 
                   at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1585) 
                   at android.widget.LinearLayout.onLayout(LinearLayout.java:1494) 
                   at android.view.View.layout(View.java:17641) 
                   at android.view.ViewGroup.layout(ViewGroup.java:5575) 
                   at android.widget.FrameLayout.layoutChildren(FrameLayout.java:323) 
                   at android.widget.FrameLayout.onLayout(FrameLayout.java:261) 
                   at android.view.View.layout(View.java:17641) 
                   at android.view.ViewGroup.layout(ViewGroup.java:5575) 
                   at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1741) 
                   at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1585) 
                   at android.widget.LinearLayout.onLayout(LinearLayout.java:1494) 
                   at android.view.View.layout(View.java:17641) 
                   at android.view.ViewGroup.layout(ViewGroup.java:5575) 
                   at android.widget.FrameLayout.layoutChildren(FrameLayout.java:323) 
                   at android.widget.FrameLayout.onLayout(FrameLayout.java:261) 
                   at com.android.internal.policy.DecorView.onLayout(DecorView.java:728) 
                   at android.view.View.layout(View.java:17641) 
                   at android.view.ViewGroup.layout(ViewGroup.java:5575) 
                   at android.view.ViewRootImpl.performLayout(ViewRootImpl.java:2346) 
                   at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:2068) 
                   at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:1254) 
                   at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:6343) 
                   at android.view.Choreographer$CallbackRecord.run(Choreographer.java:874) 
                   at android.view.Choreographer.doCallbacks(Choreographer.java:686) 
                   at android.view.Choreographer.doFrame(Choreographer.java:621) 
                   at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:860) 
                   at android.os.Handler.handleCallback(Handler.java:751) 
                   at android.os.Handler.dispatchMessage(Handler.java:95) 
                   at android.os.Looper.loop(Looper.java:154) 
                   at android.app.ActivityThread.main(ActivityThread.java:6176) 
                   at java.lang.reflect.Method.invoke(Native Method) 
                   at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:888) 
                   at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:778) 

Merci beaucoup à l'avance ....

+1

Puis-je savoir la raison pour laquelle ma question est downvoted – bharath

+0

relLayout = (RelativeLayout) itemView.findViewById (R.id.customer_chat_view)? Vérifiez si cet identifiant correspond Toa relativelayout – Vicky

+0

oui qui correspond à une disposition relative bharath

Répondre

1
java.lang.ClassCastException: android.widget.RelativeLayout$LayoutParams cannot be cast to android.widget.LinearLayout$LayoutParams 

que vous référencez disposition linéaire, mais en utilisant la disposition relative, afficher le fichier xml que vous utilisez ou par chèque linéaire mise en page

+0

Non J'utilise la disposition relative dans xml bharath

+0

Cette disposition relative est à l'intérieur d'une disposition linéaire – bharath

2

Il dit clairement

android.widget. RelativeLayout $ LayoutParams ne peut pas être converti en android.widget. LinearLayout $ LayoutParams

Vous essayez de jeter LinearLayout.LayoutParams en RelativeLayout.LayoutParams. C'est comme essayer de convertir la pomme en orange.

Modifier ceci:

int match_parent= LinearLayout.LayoutParams.MATCH_PARENT; 
int wrap_content= LinearLayout.LayoutParams.WRAP_CONTENT; 
chatView.setBackground(context.getResources().getDrawable(R.drawable.incoming_normal)); 

LinearLayout.LayoutParams parentParams=new LinearLayout.LayoutParams(match_parent,wrap_content); 
parentParams.setMarginStart(5); 
parent.setLayoutParams(parentParams); 

dans et essayer de courir.

int match_parent= RelativeLayout.LayoutParams.MATCH_PARENT; 
int wrap_content= RelativeLayout.LayoutParams.WRAP_CONTENT; 
chatView.setBackground(context.getResources().getDrawable(R.drawable.incoming_normal)); 

RelativeLayout.LayoutParams parentParams=new RelativeLayout.LayoutParams(match_parent,wrap_content); 
parentParams.setMarginStart(5); 
parent.setLayoutParams(parentParams); 
+0

Vous avez raté une ligne en lisant la question. La chose actuelle est int int rel_wrap_content = RelativeLayout.LayoutParams.WRAP_CONTENT; RelativeLayout.LayoutParams relParams = nouveau RelativeLayout.LayoutParams (rel_wrap_content, rel_wrap_content); relParams.setMarginEnd (50); – bharath

+0

Je règle rel_wrap_content sur les paramètres de mise en page relatifs non sur wrap_content qui est un paramétrage linéaire – bharath

+0

@bharath Vous devez donner des paramètres en tant que mise en page parente. Si votre Parent RelativeLayout, vous devriez utiliser RelativeLayout Params. –

0

J'ai résolu mon problème en supprimant la disposition linéaire racine et en faisant la disposition relative en tant que racine. Mais je suis paumé de la raison pour laquelle l'erreur est survenue :(