如何在可扩展列表视图中单击子项时启动新活动(kotlin)



我为应用程序创建了一个可扩展的列表视图,但遇到了一些问题。我想在每个子列表上创建一个视图按钮,当用户单击时,它将打开一个新的活动。我已经尝试了很多方法,但还是坚持了下来。请帮帮我。

主要活动.kt

private lateinit var binding: ActivityMainBinding
private lateinit var listViewAdapter: ExpandableListViewAdapter
private lateinit var chapterList: List<String>
private lateinit var topicList: HashMap<String, List<String>>
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = ActivityMainBinding.inflate(layoutInflater)
setContentView(binding.root)
showList()
listViewAdapter = ExpandableListViewAdapter( context = this, chapterList, topicList)
binding.eListView.setAdapter(listViewAdapter)

}
private fun showList() {
chapterList = ArrayList()
topicList = HashMap()
(chapterList as ArrayList<String>).add("Sebelum Berlepas")
(chapterList as ArrayList<String>).add("Setelah Sampai")
(chapterList as ArrayList<String>).add("Sebelum Masuk Mekah")
(chapterList as ArrayList<String>).add("Ketika di Kaabah")
(chapterList as ArrayList<String>).add("Ketika Tawaf")
(chapterList as ArrayList<String>).add("Keluar dari Mekah")
(chapterList as ArrayList<String>).add("Sebelum Masuk Madinah")
(chapterList as ArrayList<String>).add("Ketika di Masjid Nabawi")
(chapterList as ArrayList<String>).add("Ketika di Raudhah")
(chapterList as ArrayList<String>).add("Keluar dari Madinah")
val topic1 : MutableList<String> = ArrayList()
topic1.add("Doa Naik Kenderaan")
topic1.add("Doa Keselamatan Diri dan Harta")
topic1.add("Doa Dipermudahkan Urusan")
val topic2 : MutableList<String> = ArrayList()
topic2.add("Topic 1")
topic2.add("Topic 2")
topic2.add("Topic 3")
val topic3 : MutableList<String> = ArrayList()
topic3.add("Topic 1")
topic3.add("Topic 2")
topic3.add("Topic 3")
val topic4 : MutableList<String> = ArrayList()
topic4.add("Topic 1")
topic4.add("Topic 2")
topic4.add("Topic 3")
val topic5 : MutableList<String> = ArrayList()
topic5.add("Topic 1")
topic5.add("Topic 2")
topic5.add("Topic 3")
val topic6 : MutableList<String> = ArrayList()
topic6.add("Topic 1")
topic6.add("Topic 2")
topic6.add("Topic 3")
val topic7 : MutableList<String> = ArrayList()
topic7.add("Topic 1")
topic7.add("Topic 2")
topic7.add("Topic 3")
val topic8 : MutableList<String> = ArrayList()
topic8.add("Topic 1")
topic8.add("Topic 2")
topic8.add("Topic 3")
val topic9 : MutableList<String> = ArrayList()
topic9.add("Topic 1")
topic9.add("Topic 2")
topic9.add("Topic 3")
val topic10 : MutableList<String> = ArrayList()
topic10.add("Topic 1")
topic10.add("Topic 2")
topic10.add("Topic 3")
topicList[chapterList[0]] = topic1
topicList[chapterList[1]] = topic2
topicList[chapterList[2]] = topic3
topicList[chapterList[3]] = topic4
topicList[chapterList[4]] = topic5
topicList[chapterList[5]] = topic6
topicList[chapterList[6]] = topic7
topicList[chapterList[7]] = topic8
topicList[chapterList[8]] = topic9
topicList[chapterList[9]] = topic10
}

}

可扩展ListViewAdapter.kt

override fun getGroupCount(): Int {
return chapterList.size
}
override fun getChildrenCount(groupPosition: Int): Int {
return this.topicsList.get(chapterList[groupPosition])!!.size
}
override fun getGroup(groupPosition: Int): Any {
return chapterList[groupPosition]
}
override fun getChild(groupPosition: Int, childPosition: Int): Any {
return this.topicsList[this.chapterList[groupPosition]]!![childPosition]
}
override fun getGroupId(groupPosition: Int): Long {
return groupPosition.toLong()
}
override fun getChildId(groupPosition: Int, childPosition: Int): Long {
return childPosition.toLong()
}
override fun hasStableIds(): Boolean {
return false
}
override fun getGroupView(
groupPosition: Int,
isExpanded: Boolean,
convertView: View?,
parent: ViewGroup?
): View {
var convertView = convertView
val chapterTitle = getGroup(groupPosition) as String
if(convertView==null) {
val inflater =
context.getSystemService(Context.LAYOUT_INFLATER_SERVICE) as LayoutInflater
convertView = inflater.inflate(R.layout.chapter_list, null)
}

val chapterTv = convertView!!.findViewById<TextView>(R.id.chapter_tv)
chapterTv.setText(chapterTitle)
val img = convertView.findViewById<View>(R.id.thumbnail) as ImageView
val name = chapterTitle
chapterTv.text = name
//ASSIGN TEAM IMAGES ACCORDING TO TEAM NAME
if (name === "Sebelum Berlepas") {
img.setImageResource(R.drawable.sebelum)
} else if (name === "Setelah Sampai") {
img.setImageResource(R.drawable.sampai)
} else if (name === "Sebelum Masuk Mekah") {
img.setImageResource(R.drawable.mekah)
} else if (name === "Ketika di Kaabah") {
img.setImageResource(R.drawable.kaabah)
} else if (name === "Ketika Tawaf") {
img.setImageResource(R.drawable.tawaf)
} else if (name === "Keluar dari Mekah") {
img.setImageResource(R.drawable.mekah)
} else if (name === "Sebelum Masuk Madinah") {
img.setImageResource(R.drawable.madinah)
} else if (name === "Ketika di Masjid Nabawi") {
img.setImageResource(R.drawable.nabawi)
} else if (name === "Ketika di Raudhah") {
img.setImageResource(R.drawable.raudhah)
} else if (name === "Keluar dari Madinah") {
img.setImageResource(R.drawable.madinah)
}

return convertView
}
override fun getChildView(
groupPosition: Int,
childPosition: Int,
isLastChild: Boolean,
convertView: View?,
parent: ViewGroup?
): View
{
var convertView = convertView
val topicTitle = getChild(groupPosition, childPosition) as String
if(convertView==null) {
val inflater = context.getSystemService(Context.LAYOUT_INFLATER_SERVICE) as LayoutInflater
convertView = inflater.inflate(R.layout.topics_list, null)
}
val topicTv = convertView!!.findViewById<TextView>(R.id.topics_tv)
topicTv.setText(topicTitle)
return convertView
}
override fun isChildSelectable(groupPosition: Int, childPosition: Int): Boolean {
return true
}

}

activity_main.xml

<RelativeLayout
android:layout_width="412dp"
android:layout_height="467dp"
android:layout_marginStart="30dp"
android:layout_marginEnd="30dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/relativeNavi">
<ExpandableListView
android:id="@+id/eListView"
android:layout_width="351dp"
android:layout_height="407dp"
android:layout_alignParentStart="true"
android:layout_alignParentTop="true"
android:layout_alignParentEnd="true"
android:layout_alignParentBottom="true"
android:layout_gravity="center_horizontal"
android:layout_marginStart="30dp"
android:layout_marginTop="10dp"
android:layout_marginEnd="31dp"
android:layout_marginBottom="15dp"
android:backgroundTint="#00FFFFFF"
android:layoutDirection="rtl">
</ExpandableListView>
</RelativeLayout>
<RelativeLayout
android:id="@+id/relativeNavi"
android:layout_width="409dp"
android:layout_height="213dp"
android:background="#FFFFFF"
android:backgroundTint="#FFFFFF"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.0"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">
<TextView
android:id="@+id/textDoa"
android:layout_width="161dp"
android:layout_height="wrap_content"
android:layout_centerHorizontal="true"
android:layout_centerVertical="false"
android:layout_marginTop="40dp"
android:fontFamily="@font/poppins"
android:text="@string/doa"
android:textAlignment="center"
android:textSize="18sp" />
<ImageView
android:id="@+id/btn_back"
android:layout_width="45dp"
android:layout_height="45dp"
android:layout_alignParentStart="true"
android:layout_alignParentTop="true"
android:layout_alignParentBottom="false"
android:layout_marginStart="30dp"
android:layout_marginTop="33dp"
android:layout_marginBottom="31dp"
android:contentDescription="@string/back_button"
app:srcCompat="@drawable/btn_back"
tools:ignore="RedundantDescriptionCheck" />
<ImageView
android:id="@+id/btn_nav"
android:layout_width="45dp"
android:layout_height="45dp"
android:layout_alignParentTop="true"
android:layout_alignParentEnd="true"
android:layout_alignParentBottom="false"
android:layout_marginTop="33dp"
android:layout_marginEnd="30dp"
android:layout_marginBottom="31dp"
android:contentDescription="@string/nav_button"
app:srcCompat="@drawable/sidenav"
tools:ignore="RedundantDescriptionCheck" />
<View
android:layout_width="match_parent"
android:layout_height="1dp"
android:layout_alignParentBottom="false"
android:layout_marginTop="108dp"
android:layout_marginBottom="0dp"
android:background="@android:color/darker_gray"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toStartOf="parent"
app:layout_constraintStart_toEndOf="parent"
app:layout_constraintVertical_bias="0.116" />
<SearchView
android:layout_width="353dp"
android:layout_height="wrap_content"
android:layout_alignParentStart="true"
android:layout_alignParentEnd="true"
android:layout_alignParentBottom="true"
android:layout_marginStart="30dp"
android:layout_marginTop="41dp"
android:layout_marginEnd="30dp"
android:layout_marginBottom="25dp"
android:background="@drawable/searchview_background"
android:iconifiedByDefault="false"
android:queryHint="Carian">
</SearchView>
</RelativeLayout>

chapter_list.xml

<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal">
<TextView
android:id="@+id/chapter_tv"
android:layout_width="255dp"
android:layout_height="wrap_content"
android:layout_marginTop="20dp"
android:fontFamily="@font/poppins"
android:gravity="center_vertical"
android:text="@string/chapter_textview"
android:textAlignment="textStart"
android:textColor="@color/black"
android:textSize="16sp"
tools:ignore="RtlCompat" />
<com.mikhaellopez.circularimageview.CircularImageView
android:id="@+id/thumbnail"
android:layout_width="65dp"
android:layout_height="65dp"
android:layout_marginStart="10dp"
android:contentDescription="@string/thumbnail"
app:civ_border_color="#418434"
app:civ_border_width="1dp"
app:srcCompat="@drawable/sebelum"/>
</LinearLayout>

topics_list.xml

<androidx.gridlayout.widget.GridLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<Button
android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="View" />
<TextView
android:id="@+id/topics_tv"
android:layout_width="255dp"
android:layout_height="match_parent"
android:fontFamily="@font/poppins"
android:text="@string/topics_tv"
android:textAlignment="textStart"
android:textColor="@color/black"
android:textSize="12sp"
app:layout_column="1"
app:layout_gravity="end"
app:layout_row="0" />
</androidx.gridlayout.widget.GridLayout>

您的XML topics_list文件中已经有一个按钮。使用它的单击事件导航到另一个活动。

override fun getChildView(
groupPosition: Int,
childPosition: Int,
isLastChild: Boolean,
convertView: View?,
parent: ViewGroup?): View{
var convertView = convertView
val topicTitle = getChild(groupPosition, childPosition) as String
if(convertView==null) {
val inflater = context.getSystemService(Context.LAYOUT_INFLATER_SERVICE) as LayoutInflater
convertView = inflater.inflate(R.layout.topics_list, null)
}
val topicTv = convertView!!.findViewById<TextView>(R.id.topics_tv)
topicTv.setText(topicTitle)
val button = convertView!!.findViewById<Button>(R.id.button)
button.setOnClickListener(v-> {
//navigate to your activity here
})
return convertView

}

最新更新