Intereting Posts
Установите программные значения полей на пользовательском представлении в FrameLayout Что происходит с базой данных после обновления приложения из магазина приложений? AlertDialog внутри AlertDialog Обнуление сетевых запросов Как приложения Media Player Android, такие как MXPlayer и MoboPlayer, воспроизводят неподдерживаемые форматы файлов, такие как MKV? Путь рисования на карте google на основе lat lang Как настроить статический IP-адрес, сетевую маску, шлюз программно на Android 3.x или 4.x Как получить прозрачный фон версии webView for 4.0 Разница между управляемым и неуправляемым in-app продуктом Android? Как программно считывать маркер ImageView? Невозможно обновить / обновить список в фрагменте из другого фрагмента в ViewPager OnConfigurationChanged не вызывается в mono android Java.lang.RuntimeException: Невозможно создать экземпляр приложения, java.lang.ClassNotFoundException: Android: Где сохранен звуковой файл temp Recognition? Как добиться плавной анимации маркера местоположения в android на карте google?

Невозможно установить маржу элемента в ListView с помощью настраиваемого адаптера

Я пытаюсь установить переменные левые поля для элементов в моем ListView. Проблема возникает в моем пользовательском адаптере в методе getView:

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; } 

Мы раздуваем макет list_item, который является RelativeLayout с некоторыми текстовыми элементами внутри. Затем я пытаюсь установить поля с помощью RelativeLayout.LayoutParams. Я получаю исключение класса для этого, но обычный тип LayoutParams не имеет метода для задания полей.

Каков наилучший способ настройки поля?

Вот ошибка

 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) 

Я не уверен, где у вас есть исключение ClassCast, это на convertView.setLayoutParams(lp); ? Если да, то, пожалуйста, сообщите свой файл list_item xml. Поскольку ваш макет – RelativeLayout , тогда вы должны предоставить RelativeLayout.LayoutParams , как и вы.

EDIT : из-за ListView те же LayoutParams что и родительские, AbsListView.LayoutParams . Однако этот вид макета не обеспечивает настройки margin . В другом потоке stackoverflow я увидел, что вам нужно раздуть макет следующим образом: inflate(xml_id, listView, false); Чтобы прямо сказать, что нет связи с ListView и контентом. Однако я не мог заставить его работать.

Кроме того, я вижу, что вы устанавливаете маржу в создании convertView . Если вы это сделаете, тогда только элементы, которые сначала создаются, будут иметь свой собственный запас. У другого будет запас пересмотренного вида. Я не думаю, что это то, что ты хочешь.

Я нашел, что самый простой способ решить эту проблему состоял в том, чтобы просто обернуть мой элемент в FrameLayout в xml. Тогда я мог бы легко установить левую прокладку, как мне хотелось бы, давая мне точный взгляд, на который я надеялся.