2016-01-15 2 views
1

У меня есть линейная компоновка с горизонтальной ориентацией, в которой в ней мало изображений ImageViews (hardcoded in the xml). Я должен сортировать их на основе MultiselectListPreference (все проверенные сначала и не отмеченные позже). Чтобы поставить проверенные в начале, я попробовалКак сортировать файлы LinearLayout программно

((LinearLayout)imageView.getParent()).removeView(imageView); 
((LinearLayout)imageView.getParent()).addView(imageView,0); 

И ничего не сделал с непроверенным. Но он дает мне «указанный ребенок уже существует. Вы должны вызвать removeView (view) для данного родителя представления, хотя я уже назвал его. Это может быть потому, что все эти ImageViews присутствуют в xml. Как я могу получить желаемое расположение дочерних ImageView. Если вообще LinearLayout не хватает, должен ли я использовать RecyclerView здесь, было бы тяжелее?

+0

Я определенно думаю, что в любое время, когда вы говорите о переупорядочении просмотров, вам лучше с RecyclerView или ListView какого-либо типа. Они созданы для такого рода работ и не будут нести большую стоимость нескольких ретрансляторов. –

+0

Я смущен, так как «imageView.getParent()' будет работать, если вы просто удалили «imageView» из родительского представления ... –

+0

@GabeSechan Я расскажу о Recycler впредь. – fanatic

ответ

-1

Cast родительский вид на ViewGroup так removeView метод будет работать.

((ViewGroup)imageView.getParent()).removeView(imageView); 
+0

Он уже бросает его в LinearLayout, который является дочерью ViewGroup. Это ничего не исправит. –

+0

Действительно, это исправило мою проблему. Даже я поражен. @GabeSechan Я предлагаю вам вернуть его обратно. – fanatic

+0

Возможно, это немного оптимизировано, поэтому вы получаете объект ViewGroup вместо вызова getParent() и кастинга каждый раз, но это должно работать. Не знаю, почему кастинг как LinearLayout не сработал .. время, чтобы выкопать исходный код –

Смежные вопросы