【问题标题】:Get child from firebase on selected item on listview在列表视图上的选定项目上从 firebase 获取子项
【发布时间】:2018-03-31 10:20:52
【问题描述】:

我有以下 firebase 数据库结构: Firebase database structure .此外,我有一个显示所有不同行程的列表视图。当我单击一次旅行时,我想将“TripID”子项作为字符串。我该怎么做?

我已尝试使用以下代码,但无法使其工作。

提前谢谢你!

 final DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
        final DatabaseReference tripsRef = rootRef.child("Trips");
        ValueEventListener valueEventListener = new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {
                List<String> listTime = new ArrayList<String>();
                ArrayAdapter adapter = new ArrayAdapter<String>(getApplicationContext(), android.R.layout.simple_list_item_1, listTime);
                final ListView Time = (ListView) findViewById(R.id.Listtime);
                for (final DataSnapshot ds : dataSnapshot.getChildren()) {
                    String user = ds.child("UserName").getValue(String.class);
                    String arrival = ds.child("Arrival").getValue(String.class);
                    String departure = ds.child("Departure").getValue(String.class);
                    String time = ds.child("Time").getValue(String.class);
                    final Boolean TripID = ds.child("TripID").getValue(boolean.class);
                    String Trips = TextUtils.join("  |  ", new String[]{time, user,  departure, arrival});
                    listTime.add(Trips);
                    Time.setAdapter(adapter);

                    Time.setOnItemClickListener(new AdapterView.OnItemClickListener() {
                        @Override
                        public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
                            Intent intent = new Intent(AvailableRides.this,RideSelected.class);
                            String entry = (String) adapterView.getItemAtPosition(i);
                            TextView textView4 = findViewById(R.id.textView30);
                            String user = textView4.getText().toString();
                            String selectedFromList =(String) (Time.getItemAtPosition(TripID));
                            intent.putExtra(EXTRA_MESSAGE10,user);
                            intent.putExtra(EXTRA_MESSAGE8, entry);
                            intent.putExtra(EXTRA_MESSAGE9, TripID);
                            startActivity(intent);
                        }
                    });
                } 

【问题讨论】:

    标签: android listview firebase android-studio


    【解决方案1】:

    要解决这个问题,请在您的 listTime 列表之后声明另一个类似这样的列表:

    List<String> idsList = new ArrayList<>();
    

    在 for 循环中,更改以下代码行:

    final Boolean TripID = ds.child("TripID").getValue(boolean.class);
    

    String TripID = ds.child("TripID").getValue(String.class);
    

    另外,也在for循环内部,添加以下代码行:

    idsList.add(TripID);
    

    就在这个改变的行之后:

    String TripID = ds.child("TripID").getValue(String.class);
    

    然后在setOnItemClickListener()里面,改变这一行:

    String selectedFromList =(String) (Time.getItemAtPosition(TripID));
    

    String TripID = idsList.get(position);
    

    不要忘记在其他活动和代码的任何其他部分中将TripID 变量用作String,因为它在您的数据库中,而不是 用作@ 987654332@.

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-08-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-05-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多