Раскрывающийся список Spinner перемещается в верхнюю часть экрана после загрузки данных. - PullRequest
0 голосов
/ 26 марта 2019

List для ArrayAdapter, используемого в моем Spinner, инициализируется с 1 значением: var users: MutableList<String> = mutableListOf(currentUser).Остальные данные являются динамическими, взятыми из базы данных Google Firestore.

Когда я начинаю свою деятельность, данные из базы данных еще не загружены, поэтому отображается только начальное значение:

enter image description here

В этом состоянии дизайн выглядит именно так, как я хочу, с выпадающим списком, начинающимся с Spinner.

Однако, когда я загружаю свои данные, дизайн сбивается и выдвигается кверхняя часть экрана:

enter image description here

Вот мой код:

<Spinner
        android:id="@+id/choose_user"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        app:layout_constraintStart_toStartOf="parent" android:layout_marginStart="100dp"
        android:layout_marginEnd="8dp"
        app:layout_constraintHorizontal_bias="0.08" android:layout_marginTop="56dp"
        app:layout_constraintTop_toTopOf="parent"
    android:shadowColor="@color/colorGreen" />


class PlayerDetails : AppCompatActivity(), View.OnClickListener, TextWatcher, AdapterView.OnItemSelectedListener {

    val TAG: String = "PlayerDetails"
    val FirebaseTAG: String = "FirebaseDebug"

    var numOfPlayers: Int = 1
    var currentPlayer: Int = 1

    var name: String = ""
    var age: Int = 0
    var genderId: Int = 0
    var genderResult: String = ""

    val db = FirebaseFirestore.getInstance()
    var currentUser: String = "Player $currentPlayer"
    var users: MutableList<String> = mutableListOf(currentUser)

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        val sharedPref = this@PlayerDetails.getPreferences(Context.MODE_PRIVATE)
        val applicationID: String? = sharedPref.getString("applicationID", null)

        setContentView(R.layout.activity_player_details)

        if (applicationID != null) {
            db.collection("phones").document(applicationID)
                .collection("users")
                .get()
                .addOnSuccessListener { result ->

                    for (document in result){
                        val name = document.get("name").toString()
                        users.add(name)
                    }
                }
                .addOnFailureListener { failure -> Log.e("Failure", "crashing", failure) }

            val spinnerAdaptor = ArrayAdapter<String>(this@PlayerDetails, R.layout.truthordare_spinner_item, users)
            spinnerAdaptor.setDropDownViewResource(R.layout.truthordare_spinner_dropdown_item)
            choose_user?.adapter = spinnerAdaptor
            choose_user.onItemSelectedListener = this@PlayerDetails

        }

        val intent = getIntent()
        numOfPlayers = intent.getIntExtra("number_of_players", 1)
        next_details.setOnClickListener(this)
        player_name.addTextChangedListener(this)
        player_age.addTextChangedListener(this)
        gender.setOnCheckedChangeListener(object: RadioGroup.OnCheckedChangeListener {
            override fun onCheckedChanged(radiogroup: RadioGroup, checked: Int) {
                if (fieldsArePopulated()) next_details.visibility = View.VISIBLE
            }
        })

    }

    override fun onItemSelected(parent: AdapterView<*>?, name: View?, position: Int, rowId: Long) {
        Log.d("dropDownHorizontalOffset", choose_user.dropDownHorizontalOffset.toString())
    }

    override fun onNothingSelected(parent: AdapterView<*>?) {
    }
...

Я использую свой собственный элемент прядильщика xmlи xml dropdown (они добавляются к ArrayAdapter, как вы можете видеть выше), однако, только для изменений цвета и размера текста на самом деле - с точки зрения позиционирования они совершенно такие же, как файлы по умолчанию:

trueordare_spinner_dropdown_item.xml

<CheckedTextView xmlns:android="http://schemas.android.com/apk/res/android"
                 android:id="@android:id/text1"
                 style="?android:attr/spinnerDropDownItemStyle"
                 android:textColor="@color/colorGreen"
                 android:singleLine="true"
                 android:layout_width="match_parent"
                 android:textSize="@dimen/dropdown_text_size"
                 android:layout_height="?dropdownListPreferredItemHeight"
                 android:paddingHorizontal="3dp"
                 android:paddingVertical="5dp"
                 android:ellipsize="marquee"/>

trueordare_spinner_item.xml

<TextView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@android:id/text1"
    style="?android:attr/spinnerItemStyle"
    android:singleLine="true"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:ellipsize="marquee"
    android:textSize="24sp"
    android:textColor="@color/colorGreen"
    android:textAlignment="inherit"/>

Как я могу предотвратить перемещение позиции моего раскрывающегося меню после загрузки данных

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...