繁体   English   中英

如何用Firebase数据库填充微调器?

[英]How can I populate a spinner with my Firebase database?

我想用Firebase的数据填充微调器而不是ListView。 下面的代码与ListView可以正常工作。 但是,如何用微调框替换ListView? 希望有人可以帮助我。

我的研究:将Firebase数据提供给Spinner

从Firebase数据库填充微调器

这是我的主要活动:

public class Ansattliste extends AppCompatActivity {

DatabaseReference databaseAnsatt;
ListView lvansattliste;
Button btnleggtilansatt;

List<Ansatt> listansatt;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_ansattliste);

    databaseAnsatt = FirebaseDatabase.getInstance().getReference("Ansatte");

    lvansattliste = (ListView)findViewById(R.id.lvansattliste);
    listansatt = new ArrayList<>();

    btnleggtilansatt = (Button)findViewById(R.id.btnleggtilansatt);
    btnleggtilansatt.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Intent leggtil = new Intent(Ansattliste.this, Leggtilansatt.class);
            startActivity(leggtil);

        }
    });
}

@Override
protected void onStart() {
    super.onStart();

    databaseAnsatt.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {

            listansatt.clear();

            for (DataSnapshot ansattSnapshot : dataSnapshot.getChildren()) {


                final Ansatt ansatt = ansattSnapshot.getValue(Ansatt.class);
                listansatt.add(ansatt);
                final listAnsatt adapter = new listAnsatt(Ansattliste.this, listansatt);
                lvansattliste.setAdapter(adapter);
                adapter.notifyDataSetChanged();
                }
            }

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

和我的适配器:

public class listAnsatt extends ArrayAdapter<Ansatt> {

private Activity context;
private List<Ansatt> listansatt;


public listAnsatt(Activity context, List<Ansatt> listansatt) {
    super(context, R.layout.list_ansatt, listansatt);
    this.context = context;
    this.listansatt = listansatt;
}

@NonNull
@Override
public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent) {
    LayoutInflater inflater = context.getLayoutInflater();


    View listViewItem = inflater.inflate(R.layout.list_ansatt, null, true);

    TextView tvansattnavn = (TextView) listViewItem.findViewById(R.id.tvansattnavn);
    TextView tvansaattnr = (TextView) listViewItem.findViewById(R.id.tvansattnr);

    Ansatt ansatt = listansatt.get(position);
    tvansattnavn.setText(ansatt.getAnsattnavn());
    tvansaattnr.setText(ansatt.getAnsattnr());

    return listViewItem;
}

Firebase: Firebase

您可能会执行以下操作(我从Kotlin代码改编而成,因此这里可能会出现一些语法错误)...为了说明起见,假设getAnsattnavn()是要在微调器中显示的值。 您仍然会有listansatt ,大概是在微调器中选择项目时您会查找的。

onDataChange

    List<String> optionList = new ArrayList<>();
    for (DataSnapshot ansattSnapshot : dataSnapshot.getChildren()) {
        final Ansatt ansatt = ansattSnapshot.getValue(Ansatt.class);
        optionList.add(ansatt.getAnsattnavn());
        listansatt.add(ansatt);
    } 

    ArrayAdapter<CharSequence> adapter = new ArrayAdapter(this, android.R.layout.simple_spinner_item, optionList);
    spinnerControl.setAdapter(adapter);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM