Как загрузить данные из firebase перед загрузкой фрагмента? - PullRequest
0 голосов
/ 10 ноября 2019

У меня есть приложение для Android с 2 фрагментами, в первом я загружаю некоторые данные в firebase, все работает нормально, во втором я хочу получить эти данные из firebase, чтобы заполнить им спиннер, но проблема в том, чтофрагмент загружается так быстро, что я не могу заполнить счетчик загруженными данными. Можете ли вы поделиться некоторыми возможными решениями со мной?

Я пытался загрузить данные, переопределяющие методы onCreate и onAttach, но ни одно из них не сработало.

 public class FormSelectFragment extends Fragment
     {
 ArrayList<Form> forms=new ArrayList<>();

 @Override
 public View onCreateView(LayoutInflater inflater, ViewGroup container,                                   
 Bundle savedInstanceState)
 {
    View v=inflater.inflate(R.layout.fragment_form_select_form, container, false);
    loadData();
    setNamesSpinner(v);

    return v;
}

public void loadData()
{
    FirebaseDatabase.getInstance().getReference().child("Forms").addListenerForSingleValueEvent(new ValueEventListener()
    {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot)
        {
            for (DataSnapshot snapshot : dataSnapshot.getChildren())
            {
                forms.add(snapshot.getValue(Form.class));
                System.out.println("!!!!!!!!!!!!!!!!"+snapshot.getValue(Form.class).getName());
            }
        }

        @Override
        public void onCancelled(DatabaseError databaseError) {}
    });
}

public void setNamesSpinner(View v)
{
    ArrayList<String> names=new ArrayList<String>();

    names.add("Select a name");

    for(int i=0;i<forms.size();i++)
    {
        names.add(forms.get(i).getName());
    }

    Spinner namespinner=v.findViewById(R.id.selectname);

    ArrayAdapter<String> dataAdapter = new ArrayAdapter<String>(this.getActivity(), android.R.layout.simple_spinner_item, names)
    {
        @Override
        public boolean isEnabled(int position)
        {
            if(position == 0)
            {
                return false;
            }

            return true;
        }

        @Override
        public View getDropDownView(int position, View convertView, ViewGroup parent)
        {
            View view = super.getDropDownView(position, convertView, parent);
            TextView tv = (TextView) view;

            if(position == 0)
            {
                tv.setTextColor(Color.GRAY);
            }
            else
            {
                tv.setTextColor(Color.BLACK);
            }

            return view;
        }
    };

    dataAdapter.setDropDownViewResource(android.R.layout.simple_dropdown_item_1line);
    namespinner.setAdapter(dataAdapter);
}

}

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