Android: Spinner не работает должным образом на 4.4.x - PullRequest
0 голосов
/ 25 мая 2018

Я добавляю Spinner программно, используя класс Custom Array Adapter (который расширяет ArrayAdapter ) и Custom Layout для моего Spinner (который состоит из ImageView и TextViewна строку).

Все отлично работает, кроме Android Kit Kat : если я коснусь моего Spinner, он не показывает выпадающие элементы, даже если он содержит нужные элементы.Я отлаживаю на Android 6.x и 7.x: работает без проблем.Если я использую Custom Adapter и Layout с использованием раздутого макета (внутри XML моей деятельности), у меня не возникает никаких проблем, но если я добавлю свой Spinner программно (с использованием внешнего макета XML), он не будет работать.

Знаете ли вы, если есть известные проблемы совместимости о Spinner / Custom Adapter в Android 4.4.x?(Я могу добавить код, если он может быть полезен)

РЕДАКТИРОВАТЬ

Частичный код в моей деятельности:

TableLayout container = (TableLayout)findViewById(R.id.table);
LayoutInflater inflator = this.getLayoutInflater();
//Single row I wish to add programmatically
TableLayout row = new TableLayout(getApplicationContext());
inflator.inflate(R.layout.internal_layout_to_clone, row);
container.addView(row);
//Acquire Spinner
Spinner spinner = (Spinner)row.findViewById(R.id.spinner);
//[here I use Custom Adapter to populate my Select: values are shown properly]

R.layout.internal_layout_to_clone являетсяXML-файл, который содержит TableLayout с несколькими TableRow (s), и одна из этих строк содержит мой Spinner.

Я не знаю, заключается ли проблема в том, что я вкладываю TableLayout в другой TableLayout, возможно, это не такхорошо управляемый в Android 4.4

Ответы [ 2 ]

0 голосов
/ 29 мая 2018

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

TableLayout table = (TableLayout)findViewById(R.id.table);
LayoutInflater inflator = this.getLayoutInflater();
TableLayout row = new TableLayout(getApplicationContext());
inflator.inflate(R.layout.internal_layout_to_clone, row);
table.addView(row);

на это:

TableLayout table = (TableLayout)findViewById(R.id.table);
TableLayout row = (TableLayout)LayoutInflater.from(this).inflate(R.layout.internal_layout_to_clone, null);
table.addView(row);

Я не знаю почему, возможно, некоторые задействованные методы не полностью совместимысо старой версией Android, но теперь она работает корректно на каждой протестированной версии.

Спасибо

0 голосов
/ 25 мая 2018

Я полагаю, что проблема где-то в коде, если вы могли бы загрузить его, я посмотрю.Кстати, я использовал внешнюю библиотеку для прядильщика, которая упростила использование прядильщиков и выглядит лучше, чем обычная.https://github.com/ybq/Android-SpinKit

...