У меня есть приложение для 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);
}
}