簡體   English   中英

在 Android Studio Java 中點擊 spinner item 時從 firebase 中檢索並顯示相應的數據

[英]Retrieve and display corresponding data from firebase when clicking on spinner item in Android Studio Java

我正在制作一個應用程序,在選擇時提取有關湖泊的所有信息。 我在 firebase 中有一個湖泊數據庫,其中包含所有重要信息,例如名稱、位置、時間、發現的魚等。我已經用所有湖泊的名稱填充了一個微調器。 現在我想從微調器中單擊一個特定的湖泊名稱以獲取微調器下方顯示的所有信息,我已經進行了大量研究但沒有任何幫助。

這是我到目前為止的代碼

public class places_to_fish extends AppCompatActivity {

Spinner spinner;
DatabaseReference databaseReference;
List<String> names;
String selectedName;



@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_places_to_fish);
    names = new ArrayList<>();


    FirebaseDatabase database = FirebaseDatabase.getInstance();
    databaseReference = FirebaseDatabase.getInstance().getReference();
    databaseReference.child("Places").addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot snapshot) {
            for (DataSnapshot childSnap : snapshot.getChildren()) {

                String spinnerName = childSnap.child("Name").getValue(String.class);
                names.add(spinnerName);
            }
                ArrayAdapter<String> arrayAdapter = new ArrayAdapter<>(places_to_fish.this, android.R.layout.simple_spinner_item, names);
                arrayAdapter.setDropDownViewResource(android.R.layout.simple_spinner_item);
                spinner.setAdapter(arrayAdapter);

                spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
                    @Override
                    public void onItemSelected(AdapterView<?> adapterView, View view, int i, long l) {
                        selectedName = arrayAdapter.getItem(i);




                    }

                    @Override
                    public void onNothingSelected(AdapterView<?> adapterView) {

                    }
                });
            }

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

        }


    });

    





}

}

點擊查看Firebase數據庫

創建 class Lake.java

    public class Lake {
    public String Fish, Hours, Location, Name, Zipcode ;

    public Lake(){}
    public Lake(String Fish, String Hours,String Location, String Name, String Zipcode){
        this.Fish = Fish;
        this.Hours = Hours;
        this.Location = Location;
        this.Name = Name;
        this.Zipcode = Zipcode;
    }
}

然后,在您當前的 class 中聲明一個 HashMap

HashMap<String, Lake> map = new HashMap<String, Lake>();

現在,初始化 map 並將所有湖泊添加到其中

map.clear();
        databaseReference.addListenerForSingleValueEvent(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot snapshot) {
                Iterator <DataSnapshot> it = snapshot.getChildren().iterator();
                while(it.hasNext() ){
                    DataSnapshot item = it.next();
                    name = item.child("full_name").getValue().toString().trim();
                    String Fish = item.child("Fish").getValue().toString().trim();
                    String Hours = item.child("Hours").getValue().toString().trim();
                    String Location = item.child("Location").getValue().toString().trim();
                    String Name = item.child("Name").getValue().toString().trim();
                    String Zipcode = item.child("Zipcode").getValue().toString().trim();
                    Lake tmp_Lake = new Lake(Fish,Hours,Location,Name,Zipcode);
                    map.put(Name,tmp_Lake);
                }

            }

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

            }
        });

現在你有一個 map,其中包含所有湖泊信息(按名稱排序)所以現在,當你選擇湖泊時,你可以從 map 中獲取所有詳細信息。此代碼將創建包含湖泊名稱的數組“名稱”

public void addToList(){
        String [] names = new String[map.size()];
        int i = 0;
        for(User tmp : map.values()){
            names[i] = tmp.Name;
            i++;
        }

在初始化 map 之后調用此方法,最后,通過創建一個字符串並將其加載到文本框來顯示選定的湖泊信息

ArrayAdapter arrayAdapter  = new ArrayAdapter(place_to_fish.this, android.R.layout.simple_list_item_1,names);
    spinner.setAdapter(arrayAdapter);
    spinner.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int i, long id) {
            String lake_name = names[i];
            Lake tmp = map.get(names[i]);
            String [] Lake_details = new String[5];
            Lake_details[0] = "Name: "+tmp.Name + "\n";
            Lake_details[1] = "Fish: "+tmp.Fish + "\n";
            Lake_details[2] = "Location: "+tmp.Location + "\n";
            Lake_details[3] = "Hours: "+tmp.Hours + "\n";
            Lake_details[4] = "Zipcode "+tmp.Zipcode + "\n";
            String text = "";
            for (int i = 1; i < Lake_details.length; i++)
                text += Lake_details[i];
            full_text.setText(text);//"full_text" is a clear text box
        }
    });

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM