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

时间:2022-06-13 07:26:10

I want to populate a spinner instead of a ListView with data from Firebase. The code below works fine with ListView. But how can I replace the ListView with a spinner? Hope someone can help me with this.

我想使用Firebase中的数据填充微调器而不是ListView。下面的代码适用于ListView。但是如何用微调器替换ListView呢?希望有人可以帮助我。

My research: Firebase data to Spinner

我的研究:Firebase数据给Spinner

Populatate the spinner from Firebase database

从Firebase数据库中弹出微调器

Here is my Main Activity:

这是我的主要活动:

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){
            }
        });
    }
}

And my Adapter:

我的适配器:

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

Firebase:Firebase

1 个解决方案

#1


0  

You'd do something like following (I've adapted from Kotlin code I have here so possibility of some syntax errors)...have assumed for illustration that getAnsattnavn() is value you want to show in spinner. You'd still have listansatt which presumably you'd look up when item is selected in spinner.

你会做类似下面的事情(我改编自Kotlin代码,这里有一些语法错误的可能性)...假设插图getAnsattnavn()是你想要在微调器中显示的值。你仍然有listansatt,大概你在spinner中选择item时会查找。

In onDataChange:

在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);

#1


0  

You'd do something like following (I've adapted from Kotlin code I have here so possibility of some syntax errors)...have assumed for illustration that getAnsattnavn() is value you want to show in spinner. You'd still have listansatt which presumably you'd look up when item is selected in spinner.

你会做类似下面的事情(我改编自Kotlin代码,这里有一些语法错误的可能性)...假设插图getAnsattnavn()是你想要在微调器中显示的值。你仍然有listansatt,大概你在spinner中选择item时会查找。

In onDataChange:

在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);