Der Rand des Elements in ListView kann nicht mit benutzerdefiniertem Adapter eingestellt werden

Ich versuche, variable linke Ränder für Elemente in meinem ListView festzulegen. Das Problem tritt in meinem benutzerdefinierten Adapter in der getView-Methode auf:

public View getView(int position, View convertView, ViewGroup parent) { if(convertView == null){ Comment c = comments.get(position); convertView = inflater.inflate(R.layout.list_item, null); (TextView)convertView.findViewById(R.id.story)).setText(c.message); } RelativeLayout.LayoutParams lp = new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.FILL_PARENT, ViewGroup.LayoutParams.FILL_PARENT); lp.setMargins(0, c.getDepth() * 5, 0, 0); convertView.setLayoutParams(lp); return convertView; } 

Wir blasen das list_item Layout, das ein RelativeLayout mit einigen textViews innen ist. Ich versuche dann, die Margen mit einem RelativeLayout.LayoutParams zu setzen. Ich bekomme eine Klasse Ausgezeichnet Ausnahme, aber die normale LayoutParams-Typ hat keine Methode für die Einstellung der Ränder.

Was ist der beste Weg, um die Marge zu setzen?

Hier ist der Fehler

 java.lang.ClassCastException: android.widget.RelativeLayout$LayoutParams at android.widget.ListView.setupChild(ListView.java:1779) at android.widget.ListView.makeAndAddView(ListView.java:1748) at android.widget.ListView.fillDown(ListView.java:670) at android.widget.ListView.fillFromTop(ListView.java:727) at android.widget.ListView.layoutChildren(ListView.java:1598) at android.widget.AbsListView.onLayout(AbsListView.java:1273) at android.view.View.layout(View.java:7192) at android.widget.FrameLayout.onLayout(FrameLayout.java:338) at android.view.View.layout(View.java:7192) at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1254) at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1130) at android.widget.LinearLayout.onLayout(LinearLayout.java:1047) at android.view.View.layout(View.java:7192) at android.widget.FrameLayout.onLayout(FrameLayout.java:338) at android.view.View.layout(View.java:7192) at android.view.ViewRoot.performTraversals(ViewRoot.java:1145) at android.view.ViewRoot.handleMessage(ViewRoot.java:1865) at android.os.Handler.dispatchMessage(Handler.java:99) at android.os.Looper.loop(Looper.java:130) at android.app.ActivityThread.main(ActivityThread.java:3835) at java.lang.reflect.Method.invokeNative(Native Method) at java.lang.reflect.Method.invoke(Method.java:507) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:847) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:605) at dalvik.system.NativeStart.main(Native Method) 

  • Konfiguriere RecyclerView als Chat
  • Android - Wie bindet man eine ListView an eine Sammlung von benutzerdefinierten Objekten?
  • Erkennung Scroll Up & Scroll down in ListView
  • Holen Sie sich alle sichtbaren Objekte auf lListView
  • Android UI Design: Interaktive ListView Elemente
  • Fehler beim Verwenden der RecyclerView: Das angegebene Kind hat bereits ein übergeordnetes Element
  • Position in ListView speichern
  • Der Inhalt des Adapters hat sich geändert, aber ListView hat keine Benachrichtigung erhalten - Mit AsyncTask
  • 2 Solutions collect form web for “Der Rand des Elements in ListView kann nicht mit benutzerdefiniertem Adapter eingestellt werden”

    Ich bin nicht sicher, wo Sie Ihre ClassCast Ausnahme haben, ist es auf convertView.setLayoutParams(lp); ? Wenn ja, dann liefern Sie Ihre list_item XML-Datei bitte. Als dein Layout ist ein RelativeLayout , dann musst du ein RelativeLayout.LayoutParams liefern, wie du es getan hast.

    EDIT : Wegen der ListView müssen die gleichen LayoutParams als übergeordneten mitgeliefert werden, ein AbsListView.LayoutParams . Allerdings bietet diese Art von Layout nicht die margin Setter. Auf einem anderen Stackoverflow-Thread habe ich gesehen, dass du das Layout so inflate(xml_id, listView, false); Ausdrücklich gesagt, es gibt keine Verbindung mit dem ListView und dem Inhalt. Allerdings konnte ich es auch nicht machen.

    Außerdem sehe ich, dass du den Rand in der convertView Erstellung setzt. Wenn du das magst, dann werden nur die Items, die zuerst erstellt werden, ihre eigene benutzerdefinierte Marge haben. Andere haben die Recycling-Sichtspanne. Ich glaube nicht, dass es das ist, was du willst.

    Ich fand den einfachsten Weg, um dieses Problem zu lösen war einfach wickeln mein Element in einem FrameLayout in der xml. Ich konnte dann einfach die linke Polsterung setzen, wie ich es wünschte und mir so den genauen Blick gab, auf den ich hoffte.

    Das Android ist ein Google Android Fan-Website, Alles ├╝ber Android Phones, Android Wear, Android Dev und Android Spiele Apps und so weiter.