簡體   English   中英

單擊 Listview 中的項目時,如何在新活動中從 firebase 檢索數據?

[英]How to retrieve data from firebase in new activity when an item in Listview is being clicked?

我正在開發一個應用程序,我使用 Firebase 作為我的數據庫,並在 ListView 中顯示了一些單詞。

當我單擊列表視圖中的特定項目時,該單詞的數據應從 firebase 獲取,並且應顯示在新活動中。

我已設法在列表視圖中顯示來自 firebase 的數據,但當用戶單擊某個項目時無法顯示其他詳細信息。

我附上了代碼。

這是在列表視圖中顯示來自 firebase 的數據的活動。

儀表板.java

    public class Dashboard extends AppCompatActivity {

    ListView listView;
    FirebaseDatabase firebaseDatabase;
    DatabaseReference dreff, ref;
    ArrayList<String> words;
    ArrayList<Word> words2;
    ArrayAdapter<String> adapter;
    Word word;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_dashboard);
        listView = (ListView) findViewById(R.id.listView);
        firebaseDatabase = FirebaseDatabase.getInstance();
        dreff = firebaseDatabase.getReference("words");
        ref = firebaseDatabase.getReference("words");
        words = new ArrayList<>();
        words2 = new ArrayList<Word>();
        adapter = new ArrayAdapter<>(Dashboard.this, R.layout.word_info, R.id.word_info_list, words);

        dreff.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                for (DataSnapshot ds: dataSnapshot.getChildren()){
                    word = ds.getValue(Word.class);
                    words.add("" + word.getWord().toString());
                }
                listView.setAdapter(adapter);
            }

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

            }
        });

        ref.addChildEventListener(new ChildEventListener() {
            @Override
            public void onChildAdded(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {
                String word = dataSnapshot.child("word").getValue(String.class);
                String description = dataSnapshot.child("description").getValue(String.class);
                String tamil = dataSnapshot.child("tamilword").getValue(String.class);


                words2.add(new Word(word, description, tamil));
            }

            @Override
            public void onChildChanged(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {

            }

            @Override
            public void onChildRemoved(@NonNull DataSnapshot dataSnapshot) {

            }

            @Override
            public void onChildMoved(@NonNull DataSnapshot dataSnapshot, @Nullable String s) {

            }

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

            }
        });

        listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                Intent intent = new Intent(Dashboard.this, Meaning.class);
                intent.putExtra("description", listView.getItemAtPosition(position).toString());
                startActivity(intent);
            }
        });
    }
}

這是字。java class

字.java

    public class Word {

    public String word;
    public String tamilword;
    public String description;


    public Word() {
    }

    public Word(String word, String description, String tamil) {

    }

    public String getWord() {
        return word;
    }

    public void setWord(String word) {
        this.word = word;
    }

    public String getTamilword() {
        return tamilword;
    }

    public void setTamilword(String tamilword) {
        this.tamilword = tamilword;
    }

    public String getDescription() {
        return description;
    }

    public void setDescription(String description) {
        this.description = description;
    }
}

現在我想在用戶單擊列表視圖中的項目時顯示其他詳細信息。

我在下面附上了 firebase 數據庫。

好的,所以當您單擊該項目時,請執行以下操作:

不是最好的方法,但只是讓你明白,我建議將 position 傳遞給另一個活動並在打開的活動中進行獲取

    listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {


   //fetch the details of the item

   dreff.child(String.valueOf(position+1)).addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
         //get details of the item
          String description = dataSnapshot.child("description").getValue(String.class);
          String image = dataSnapshot.child("image").getValue(String.class);
          String tamilword = dataSnapshot.child("tamilword").getValue(String.class);
          String word = dataSnapshot.child("word").getValue(String.class);

        //open another acivity and pass these


        }

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

        }
    });


        }
    });

暫無
暫無

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

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