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 kann ich die Tilt-Map in Android anzeigen?
  • Wie programmgesteuert eine neue VPN-Schnittstelle mit Android 4.0 zu erstellen?
  • Android Keyboard Quelle
  • Wie mache ich Aktivität, die auf Halbbildschirm erscheinen?
  • Wie benutzt man findViewById () in robolectric
  • Cordova Plattform add android gibt den Fehler: "Fehler: Der bereitgestellte Pfad ist kein Android-Projekt."
  • 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) 

  • Wie kann man einen Dialog themed wie Aktivität abbrechen, wenn er außerhalb des Fensters berührt wird?
  • Android: wie man ACRA crash erstellt Report Txt File?
  • Fehler kompilieren in "Use Facebook Login" SDK
  • Schließen Sie Spinner auf Klick außerhalb von Spinner
  • Mapbox startet nicht in einem Fragment
  • API zum Konfigurieren statischer IP-Adressen in einer Android-Anwendung
  • 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.