首页 > 解决方案 > 如何让以下信息显示在微调器或下拉框中

问题描述

我有以下代码,我可以从 firebase 检索信息,但我如何让用户通过下拉框选择每个医疗诊所?然后,这将使用户进入下一步,为该特定诊所撰写评论:

public class ListViewActivity extends AppCompatActivity {

private ListView listview;
private EditText edit;

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

    listview = findViewById(R.id.listView);
    edit = findViewById(R.id.edit);

    final ArrayList<String> list = new ArrayList<>();
    final ArrayAdapter adapter = new ArrayAdapter<String>(this, R.layout.list_item, list);

    listview.setAdapter(adapter);

    DatabaseReference reference = FirebaseDatabase.getInstance().getReference().child("Medical Clinic");
    reference.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
            list.clear();
            for (DataSnapshot snapshot : dataSnapshot.getChildren()) {
                Information info = snapshot.getValue(Information.class);
                assert info != null;
                String txt = info.getName() + " : " + info.getAddress() + " :" + info.getPhone_No() + " : " + info.getPostcode();
                list.add(txt);
               //      list.add(snapshot.getValue().toString());
            }
            adapter.notifyDataSetChanged();
        }

        @Override
        public void onCancelled(@NonNull DatabaseError error) {

        }
    });
}

标签: android-studio

解决方案


不使用 listView,而是使用微调器

Spinner spinner;
List<String> list = new ArrayList<>();

ArrayAdapter<String> adapter = new ArrayAdapter<String>(context, R.layout.spinner_custom_layout, list);
        
dataAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);

spinner.setAdapter(adapter);

spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
            @Override
            public void onItemSelected(AdapterView<?> parent, View view, int pos, long id) {
               // your code
            }
            @Override
            public void onNothingSelected(AdapterView<?> parent) { }
        });

更新列表和通知适配器的方式与您对列表视图适配器所做的相同,使用list.add(txt);andadapter.notifyDataSetChanged();

spinner_custom_layout.xml

<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/standard_spinner_format"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:textSize="14sp"
    android:textColor="#000000">

</TextView>

布局文件 simple_spinner_dropdown_item.xml 已经在库中,您不必创建它

完整的java代码

public class ListViewActivity extends AppCompatActivity {

private Spinner spinner;
private EditText edit;

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

    listview = findViewById(R.id.listView);
    edit = findViewById(R.id.edit);

    
    List<String> list = new ArrayList<>();
    
    ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, R.layout.spinner_custom_layout, list);
            
    dataAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
    
    spinner.setAdapter(adapter);
    
    spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
                @Override
                public void onItemSelected(AdapterView<?> parent, View view, int pos, long id) {
                   // your code
                }
                @Override
                public void onNothingSelected(AdapterView<?> parent) { }
            });

    DatabaseReference reference = FirebaseDatabase.getInstance().getReference().child("Medical Clinic");
    reference.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
            list.clear();
            for (DataSnapshot snapshot : dataSnapshot.getChildren()) {
                Information info = snapshot.getValue(Information.class);
                assert info != null;
                String txt = info.getName() + " : " + info.getAddress() + " :" + info.getPhone_No() + " : " + info.getPostcode();
                list.add(txt);
               //      list.add(snapshot.getValue().toString());
            }
            adapter.notifyDataSetChanged();
        }

        @Override
        public void onCancelled(@NonNull DatabaseError error) {

        }
    });
}

推荐阅读