Спиннер исчезает после того, как setOnSelectedListener выполняет какой-либо запрос - PullRequest
0 голосов
/ 05 сентября 2018

Я хочу построить Download Activity, данные загружаются из firebase. Деятельность имеет один спиннер и один просмотрщик.

Я использую Android Spinner по умолчанию

XML:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context="com.example.yehezkiel.eclassapp.MateriActivity">


    <Spinner
        android:id="@+id/spinner"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content">
    </Spinner>


    <android.support.v7.widget.RecyclerView
        android:id="@+id/recycler_materi"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        tools:layout_editor_absoluteX="8dp"
        tools:layout_editor_absoluteY="56dp" />

</LinearLayout>

Java:

   final Spinner areaSpinner = (Spinner) findViewById(R.id.spinner);
    areaSpinner.setOnItemSelectedListener(this);




    userRef.child(users.getUid()).addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            if(dataSnapshot.exists()){
                for(DataSnapshot dataHasil :dataSnapshot.getChildren()){
                    String nama_matkul = (String) dataHasil.getValue();
                    key.add(nama_matkul);
                    final String idCourses = dataHasil.getKey();



                }
                ArrayAdapter<String> areasAdapter = new ArrayAdapter<String>(MateriActivity.this, android.R.layout.simple_spinner_item, key);
                areasAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
                areaSpinner.setAdapter(areasAdapter);




            }else{

            }
        }

        @Override
        public void onCancelled(DatabaseError databaseError) {

        }
    });

}



@Override
public void onItemSelected(AdapterView<?> parent, final View view, int position, long l) {
    final String item = parent.getItemAtPosition(position).toString();
    listMateri.clear();

    materiRef.child(item).addChildEventListener(new ChildEventListener() {
        @Override
        public void onChildAdded(DataSnapshot dataSnapshot, String s) {
            if(dataSnapshot.exists()){
                MateriKuliah materi = dataSnapshot.getValue(MateriKuliah.class);

                listMateri.add(materi);
                mAdapter.notifyDataSetChanged();

            }else{
                Snackbar.make(view, "Tidak ada Materi " , Snackbar.LENGTH_LONG).show();
                mAdapter.notifyDataSetChanged();
            }
        }

        @Override
        public void onChildChanged(DataSnapshot dataSnapshot, String s) {

        }

        @Override
        public void onChildRemoved(DataSnapshot dataSnapshot) {

        }

        @Override
        public void onChildMoved(DataSnapshot dataSnapshot, String s) {

        }

        @Override
        public void onCancelled(DatabaseError databaseError) {

        }
    });
}

@Override
public void onNothingSelected(AdapterView<?> adapterView) {

}

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

Проблема заключается в том, что данные из базы данных заполняют представление переработчика, после чего вращение исчезает. Я не знаю, что здесь происходит.

Видео моего приложения и проблема: https://streamable.com/6ikba

1 Ответ

0 голосов
/ 05 сентября 2018

Это происходит потому, что вы использовали ConstraintLayout, и вы не установили ограничения для макета, поэтому то, что здесь происходит, - Recyclerview перекрывает счетчик после того, как он получает достаточно данных для покрытия экрана. Так что вы можете здесь установить ограничения или использовать любые другие Viewgroup, например RelativeLayout, которые могут быть полезны в вашем случае.

Подробнее о ConstraintLayout можно узнать здесь: https://developer.android.com/training/constraint-layout/

...