Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/186.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android Firebase-获取所有子项并添加到ListView_Android_Firebase_Firebase Realtime Database_Kotlin - Fatal编程技术网

Android Firebase-获取所有子项并添加到ListView

Android Firebase-获取所有子项并添加到ListView,android,firebase,firebase-realtime-database,kotlin,Android,Firebase,Firebase Realtime Database,Kotlin,我在一个活动中有4个片段,数据库片段,当前保存着ListView,它将查询Firebase以从父节点“资产”获取子节点。此外,ListView还有一个自定义适配器,使其能够拥有标题和副标题 这是数据库结构 这是主要活动: private var toolbar: ActionBar? = null override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) se

我在一个活动中有4个片段,数据库片段,当前保存着ListView,它将查询Firebase以从父节点“资产”获取子节点。此外,ListView还有一个自定义适配器,使其能够拥有标题和副标题

这是数据库结构

这是主要活动:

private var toolbar: ActionBar? = null

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_main)

    toolbar = supportActionBar

    toolbar?.title = resources.getString(R.string.navigation_database)
    loadFragment(DatabaseFragment())

    setNavigation()
}
private fun setNavigation(){
    val bottomNavigationView = findViewById<BottomNavigationView>(R.id.bottomNavigation)
    bottomNavigationView.setOnNavigationItemSelectedListener { item ->

        var fragment: Fragment

        when (item.itemId) {
            R.id.navigation_database -> {
                toolbar?.title = resources.getString(R.string.navigation_database)
                fragment = DatabaseFragment()
                loadFragment(fragment)
            }
            R.id.navigation_track -> {
                toolbar?.title = resources.getString(R.string.navigation_tracking)
                fragment = TrackingFragment()
                loadFragment(fragment)
            }
            R.id.navigation_activities -> {
                toolbar?.title = resources.getString(R.string.navigation_activities)
                fragment = ActivitiesFragment()
                loadFragment(fragment)
            }
            R.id.navigation_references -> {
                toolbar?.title = resources.getString(R.string.navigation_references)
                fragment = ReferencesFragment()
                loadFragment(fragment)
            }
        }
        true
    }
}
private fun loadFragment(fragment: Fragment){
    val fragmentTransaction = supportFragmentManager.beginTransaction()
    fragmentTransaction.replace(R.id.childLayout, fragment)
    fragmentTransaction.addToBackStack(null)
    fragmentTransaction.commit()
}

覆盖数据更改(dataSnapshot:dataSnapshot)
中,将所有内容添加到列表后,需要调用
适配器.notifydatasetchange()

您可以保留对适配器的全局
var
引用,或者按ID查找回收器视图并获取其适配器


您可能还想在添加内容之前清除列表。

请提及您的问题陈述。!我目前无法编辑帖子,但列表视图没有显示任何项目查看我的答案再告诉我一件事字幕列表。添加(“字幕”)为什么要添加此静态数据“字幕”?好吧,我目前的重点是获取子键,该子键将显示为下面代码的标题运行并检查。你有没有得到数据。?并发布firebase数据库的读写规则
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
    val rootView = inflater.inflate(R.layout.fragment_database, container, false)

    val titleList = ArrayList<String>()
    val subtitleList = ArrayList<String>()

    val databaseReference = FirebaseDatabase.getInstance().getReference("Assets")
    databaseReference.addValueEventListener(object : ValueEventListener{
        override fun onCancelled(databaseError: DatabaseError) {
        }

        override fun onDataChange(dataSnapshot: DataSnapshot) {
            for(childSnapshot: DataSnapshot in dataSnapshot.children){
                titleList.add(childSnapshot.key.toString())
                subtitleList.add("subtitle")
            }
        }

    })

    val listView = rootView.findViewById(R.id.databaseListView) as ListView
    val adapter = DatabaseListAdapter(activity as MainActivity, titleList, subtitleList)
    listView.adapter = adapter

    return rootView
}
public Context context;
public ArrayList<String> titleList;
public ArrayList<String> subtitleList;

public DatabaseListAdapter(Context context, ArrayList<String> titleList, ArrayList<String> subtitleList){
    this.context = context;
    this.titleList = titleList;
    this.subtitleList = subtitleList;
}

@Override
public int getCount() {
    return titleList.size();
}

@Override
public Object getItem(int position) {
    return titleList.get(position);
}

@Override
public long getItemId(int position) {
    return position;
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    View rootView = LayoutInflater.from(context).inflate(R.layout.layout_listview_database, parent, false);

    TextView titleView = rootView.findViewById(R.id.titleView);
    TextView subtitleView = rootView.findViewById(R.id.subtitleView);

    titleView.setText(titleList.get(position));
    subtitleView.setText(subtitleList.get(position));

    return rootView;
}
{
"rules": {
".read": true,
".write": true
   }
}