Невозможно установить маржу элемента в 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. Тогда я мог бы легко установить левую прокладку, как мне хотелось бы, давая мне точный взгляд, на который я надеялся.

Intereting Posts
Как делиться текстом и изображением в Google Plus (G +) с андроидом без использования намерения? Код API Google Play Services за пределами активности? CardView выбрал цвет фона в RecyclerView Отправка упорядоченной широковещательной рассылки локально (в рамках моего процесса)? Модуляция FSK и воспроизведение синусоида на Android Java.lang.NoSuchMethodError: Нет статического метода getDrawable (Landroid / content / Context; I) Landroid / graphics / drawable / Drawable; Проверка на стороне сервера биллинга версии 3 для покупок в приложении Google Анимированный логотип вместе с рушащейся панелью инструментов в CoordinatorLayout Библиотека материалов – предотвращение отклонения / закрытия диалога on onPositive function call GridView.LayoutParams не существует, разрывается код Android Как выделить элемент сетки для выбора? Как установить режим выбора для списка с изображениями Android – findViewById (R.id.list) возвращает null JSON Post To Rails с Android Продолжайте работать, когда экран выключен