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.

  • Wie funktioniert die automatische Fragmentwiederherstellung
  • Erstellen einer kreisförmigen Ansicht in android
  • Wie kann ich Fabrik-Reset mit Adb in Android?
  • Wie kann ich ein GridView aktualisieren?
  • Android-Kamera Absicht
  • Benutzerdefinierte Benutzer der Benutzeroberfläche
  • 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) 

  • Öffnen Sie TextView-Links bei einer anderen Aktivität, nicht Standard-Browser
  • Edittext-Cursor nach links zurücksetzen nach Android Data Binding Update
  • In-App-Abrechnung v3 - Erkennung der Rückerstattung nicht
  • Mehrere Eingabeparameter für die Methode execute () von AsyncTask
  • Wie bekomme ich einen Blick aus Espresso, um in eine IdlingResource zu gehen?
  • Karte v2 SupportMapFragment im Viewpager
  • 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.