【发布时间】:2018-08-07 04:58:11
【问题描述】:
我在一个活动中有 4 个片段,即数据库片段,当前包含将查询 Firebase 以从父节点“资产”获取子节点的 ListView。此外,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()
}
这是数据库片段:
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;
}
Firebase 数据库规则:
{
"rules": {
".read": true,
".write": true
}
}
【问题讨论】:
-
请提及您的问题陈述!
-
我目前无法编辑帖子,但 listView 没有显示任何项目
-
看看我的回答再告诉我一件事 subtitleList.add("subtitle") 为什么要添加这个静态数据“subtitle”。?
-
好吧,我目前正专注于获取将显示为标题的子键
-
运行下面的代码并检查。你有没有得到数据。?并发布您对 firebase 数据库的读写规则
标签: android firebase firebase-realtime-database kotlin