gpt4 book ai didi

android - 如何使用kotlin在recyclerview中附加xml文件?

转载 作者:行者123 更新时间:2023-12-02 13:31:24 24 4
gpt4 key购买 nike

所以我试图实现一个从开放源代码项目中获取的xml文件,并将其附加到recyclerview,每当我这样做时,我的应用程序以太崩溃或它不显示xml文件,我不确定为什么!

请帮我解决这个问题

这是我到达的地方

与我的xml文件类似的Xml示例

<quran>
<sura index="1" name="الفاتحة">
<aya index="1" text="بِسْمِ اللَّهِ الرَّحْمَنِ الرَّحِيمِ" />
<aya index="2" text="الْحَمْدُ لِلَّهِ رَبِّ الْعَالَمِينَ" />
<aya index="3" text="الرَّحْمَنِ الرَّحِيمِ" />
<aya index="4" text="مَالِكِ يَوْمِ الدِّينِ" />
<aya index="5" text="إِيَّاكَ نَعْبُدُ وَإِيَّاكَ نَسْتَعِينُ" />
<aya index="6" text="اهْدِنَا الصِّرَاطَ الْمُسْتَقِيمَ" />
<aya index="7" text="صِرَاطَ الَّذِينَ أَنْعَمْتَ عَلَيْهِمْ غَيْرِ الْمَغْضُوبِ عَلَيْهِمْ وَلَا الضَّالِّينَ" />
</sura>
<sura index="2" name="البقرة">
<aya index="1" text="الم" bismillah="بِسْمِ اللَّهِ الرَّحْمَنِ الرَّحِيمِ" />
<aya index="2" text="ذَلِكَ الْكِتَابُ لَا رَيْبَ فِيهِ هُدًى لِلْمُتَّقِينَ" />
<aya index="3" text="الَّذِينَ يُؤْمِنُونَ بِالْغَيْبِ وَيُقِيمُونَ الصَّلَاةَ وَمِمَّا رَزَقْنَاهُمْ يُنْفِقُونَ" />
<aya index="4" text="وَالَّذِينَ يُؤْمِنُونَ بِمَا أُنْزِلَ إِلَيْكَ وَمَا أُنْزِلَ مِنْ قَبْلِكَ وَبِالْآخِرَةِ هُمْ يُوقِنُونَ" />
<aya index="5" text="أُولَئِكَ عَلَى هُدًى مِنْ رَبِّهِمْ وَأُولَئِكَ هُمُ الْمُفْلِحُونَ" />
<aya index="6" text="إِنَّ الَّذِينَ كَفَرُوا سَوَاءٌ عَلَيْهِمْ أَأَنْذَرْتَهُمْ أَمْ لَمْ تُنْذِرْهُمْ لَا يُؤْمِنُونَ" />
<aya index="7" text="خَتَمَ اللَّهُ عَلَى قُلُوبِهِمْ وَعَلَى سَمْعِهِمْ وَعَلَى أَبْصَارِهِمْ غِشَاوَةٌ وَلَهُمْ عَذَابٌ عَظِيمٌ" />
<aya index="8" text="وَمِنَ النَّاسِ مَنْ يَقُولُ آمَنَّا بِاللَّهِ وَبِالْيَوْمِ الْآخِرِ وَمَا هُمْ بِمُؤْمِنِينَ" />
<aya index="9" text="يُخَادِعُونَ اللَّهَ وَالَّذِينَ آمَنُوا وَمَا يَخْدَعُونَ إِلَّا أَنْفُسَهُمْ وَمَا يَشْعُرُونَ" />
<aya index="10" text="فِي قُلُوبِهِمْ مَرَضٌ فَزَادَهُمُ اللَّهُ مَرَضًا وَلَهُمْ عَذَابٌ أَلِيمٌ بِمَا كَانُوا يَكْذِبُونَ" />
<aya index="11" text="وَإِذَا قِيلَ لَهُمْ لَا تُفْسِدُوا فِي الْأَرْضِ قَالُوا إِنَّمَا نَحْنُ مُصْلِحُونَ" />
<aya index="12" text="أَلَا إِنَّهُمْ هُمُ الْمُفْسِدُونَ وَلَكِنْ لَا يَشْعُرُونَ" />
</sura>

我的类(class)
class Sura {

var index: String? = null
var name: String? = null
var text: String? = null
var bismillah : String? = null


override fun toString(): String{
return "Index = $index\n Name = $name\n Text = $text\n Bismillah = $bismillah"
}
}

Xml处理程序
class xmlPullHandler {
private val quran = ArrayList<Sura>()
private var quran1 : Sura? = null
private var text1 : String? = null

fun parse(inputStream: InputStream): List<Sura>{
try {
val factory = XmlPullParserFactory.newInstance()
factory.isNamespaceAware = true
val parser = factory.newPullParser()
parser.setInput(inputStream, null)
var eventType = parser.eventType
while (eventType != XmlPullParser.START_DOCUMENT){
var tagName = parser.name
when (eventType){
XmlPullParser.START_TAG -> if (tagName.equals("quran1", ignoreCase = true)){
quran1 = Sura()
}
XmlPullParser.TEXT -> text1 = parser.text
XmlPullParser.END_TAG -> if (tagName.equals("quran1", ignoreCase = true)){
quran1?.let { quran.add(it) }
}else if (tagName.equals("index", ignoreCase = true)){
quran1!!.index = text1
}else if (tagName.equals("name", ignoreCase = true)){
quran1!!.name = text1
}else if (tagName.equals("text", ignoreCase = true)){
quran1!!.text = text1
}else if (tagName.equals("bismillah", ignoreCase = true)){
quran1!!.bismillah = text1
}
else ->{

}
}
eventType = parser.next()
}
}catch (e: XmlPullParserException){
e.printStackTrace()
}catch (e: IOException){
e.printStackTrace()
}
return quran
}
}

我的Recycler View 适配器
class SuraAdabters (private var quran: MutableList<Sura> ):RecyclerView.Adapter<SuraAdabters.SuraHolder>() {

private var quran1 : Sura? = null

override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): SuraHolder {
val view = LayoutInflater.from(parent.context)
.inflate(R.layout.quranlayouts, parent , false)
return SuraHolder(view)
}


override fun getItemCount(): Int = quran.size


override fun onBindViewHolder(holder: SuraHolder, position: Int) {
quran[position]
var text = holder.itemView.findViewById<TextView>(R.id.QuranText)


}
class SuraHolder(itemview: View):RecyclerView.ViewHolder(itemview){

}
}

我保存了rcycler的片段
class guranFragments : Fragment() {
var quran = arrayListOf<Sura>()
private lateinit var myAdapter: SuraAdabters

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)

}

override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
// Inflate the layout for this fragment
return inflater.inflate(R.layout.fragment_guran_fragments, container, false)


}

override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
myAdapter = SuraAdabters(quran)

SuraRecycler.layoutManager = LinearLayoutManager(this.context)
SuraRecycler.addItemDecoration(DividerItemDecoration(this.context, OrientationHelper.VERTICAL))
SuraRecycler.adapter = myAdapter

try {
val parser = xmlPullHandler()
val assets = context!!.assets.open("quran.xml")
parser.parse(assets)

myAdapter = SuraAdabters(quran)

}catch (io: IOException){
io.printStackTrace()
}
}

这是我的回收者 View 的xml样式,我希望数据以这种格式显示
<androidx.constraintlayout.widget.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent">

<LinearLayout
android:id="@+id/linearLayout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">

<TextView
android:id="@+id/QuranText"
android:textAlignment="center"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Hello"
android:textSize="40sp" />

<TextView
android:id="@+id/textaya"
android:text="Hello"
android:textSize="40sp"
android:layout_width="match_parent"
android:layout_height="match_parent" />

</LinearLayout>


<LinearLayout
android:id="@+id/linearLayout2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="bottom"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent">

<TextView
android:id="@+id/pageNumber"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:text="Hello"
android:textSize="40sp" />
</LinearLayout>

zip 请仅通过Kotlin帮助我,因为我不懂Java或Kotlin之外的任何其他语言

我几乎尝试了所有操作,但是xml数据未出现在我的应用程序中
请帮助并提前感谢...

最佳答案

您需要将解析函数返回的元素放入与ArrayList关联的adapter中,然后通知adapter您的数据集已更改

override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
myAdapter = SuraAdabters(quran)

SuraRecycler.layoutManager = LinearLayoutManager(this.context)
SuraRecycler.addItemDecoration(DividerItemDecoration(this.context, OrientationHelper.VERTICAL))
SuraRecycler.adapter = myAdapter

try {
val parser = xmlPullHandler()
val assets = context!!.assets.open("quran.xml")
val parsedAssets = parser.parse(assets)
quran.addAll(parsedAssets)
myAdapter.notifyDatasetChanged()
} catch (io: IOException){
io.printStackTrace()
}
}

关于android - 如何使用kotlin在recyclerview中附加xml文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61231894/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com