Я пытаюсь создать пользовательский адаптер данные чертежа из RealmObject () :
RealmObject () возвращает строку, содержащую заголовок и описание, разделенные запятой, которые будут разделены в пользовательском адаптере .
Видимо RealmResults.toArray () имеет тип Array, тогда как пользовательский адаптер принимает Array .Я пытался преобразовать RealmResults в массив строк, добавив, изменив его на results.toArray () как массив , но я получаю следующую ошибку.
**java.lang.ClassCastException: java.lang.Object[] cannot be cast to java.lang.String[]**
Видимо results.toArray () имеет тип Array, в то время как пользовательский адаптер принимает массив.
Я изменил его на, но получил ошибку.
Main Фрагмент:
override fun onResume() {
super.onResume()
Realm.init(context!!)
val realm = Realm.getDefaultInstance()
val query = realm.where(CyeFarmListObject::class.java)
val results = query.findAll()
val listView = view?.findViewById<ListView>(R.id.moviesListView)
listView?.setOnItemClickListener { _, _, i, _ ->
val selectedMovie = results[i]
val editIntent = Intent(activity, EditMoviesActivity::class.java)
if (selectedMovie!= null) {
editIntent.putExtra("movieItem", selectedMovie.getID())
startActivity(editIntent)
}
}
val array: Array<String> = results.toArray() as Array<String>
val adapter =
activity?.let { MyListAdapter(it, array) }
if (listView != null) {
listView.adapter = adapter
}
}
Файл макета:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal">
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center"
android:orientation="horizontal">
<TextView
android:id="@+id/title"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="15dp"
android:text="title"
android:textAppearance="@style/Base.TextAppearance.AppCompat.Medium"
android:textStyle="bold" />
<LinearLayout
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:orientation="vertical">
<TextView
android:id="@+id/description"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="15dp"
android:layout_marginTop="5dp"
android:text="description"
android:textSize="16sp" />
</LinearLayout>
</LinearLayout>
</LinearLayout>
Пользовательский адаптер:
import android.app.Activity
import android.view.View
import android.view.ViewGroup
import android.widget.ArrayAdapter
import android.widget.TextView
class MyListAdapter(private val context: Activity, private val a: Array<String>)
: ArrayAdapter<String>(context, R.layout.fragment_list_of_list, a) {
override fun getView(position: Int, view: View?, parent: ViewGroup): View {
val inflater = context.layoutInflater
val rowView = inflater.inflate(R.layout.fragment_list_of_list, null, true)
var splitter : Array<String> = a.toString().split(",").toTypedArray()
var split1 = splitter[0]
var split2 = splitter[1]
val titleText = rowView.findViewById<TextView>(R.id.title) as TextView
val descriptionText = rowView.findViewById<TextView>(R.id.description) as TextView
titleText.text = split1
descriptionText.text = split2
return rowView
}
}
Logcat:
2020-04-08 18:49:03.232 4945-4945/com.my.code E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.my.code PID: 4945
java.lang.ClassCastException: java.lang.Object[] cannot be cast to java.lang.String[]
at com.demicode.ccdofieldkit.MovieListFragment.onResume(CyeFarmListFragment.kt:35)
at androidx.fragment.app.Fragment.performResume(Fragment.java:2747)
at androidx.fragment.app.FragmentStateManager.resume(FragmentStateManager.java:373)
at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1199)
at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1356)
at androidx.fragment.app.FragmentManager.moveFragmentToExpectedState(FragmentManager.java:1434)
at androidx.fragment.app.BackStackRecord.executeOps(BackStackRecord.java:442)
at androidx.fragment.app.FragmentManager.executeOps(FragmentManager.java:2169)
at androidx.fragment.app.FragmentManager.executeOpsTogether(FragmentManager.java:1992)
at androidx.fragment.app.FragmentManager.removeRedundantOperationsAndExecute(FragmentManager.java:1947)
at androidx.fragment.app.FragmentManager.execSingleAction(FragmentManager.java:1818)
at androidx.fragment.app.BackStackRecord.commitNowAllowingStateLoss(BackStackRecord.java:303)
at androidx.fragment.app.FragmentPagerAdapter.finishUpdate(FragmentPagerAdapter.java:246)
at androidx.viewpager.widget.ViewPager.populate(ViewPager.java:1244)
at androidx.viewpager.widget.ViewPager.setCurrentItemInternal(ViewPager.java:669)
at androidx.viewpager.widget.ViewPager.setCurrentItemInternal(ViewPager.java:631)
at androidx.viewpager.widget.ViewPager.setCurrentItem(ViewPager.java:612)
at com.google.android.material.tabs.TabLayout$ViewPagerOnTabSelectedListener.onTabSelected(TabLayout.java:3222)
at com.google.android.material.tabs.TabLayout.dispatchTabSelected(TabLayout.java:1734)
at com.google.android.material.tabs.TabLayout.selectTab(TabLayout.java:1727)
at com.google.android.material.tabs.TabLayout.selectTab(TabLayout.java:1687)
at com.google.android.material.tabs.TabLayout$Tab.select(TabLayout.java:2080)
at com.google.android.material.tabs.TabLayout$TabView.performClick(TabLayout.java:2269)
at android.view.View.performClickInternal(View.java:7327)
at android.view.View.access$3600(View.java:807)
at android.view.View$PerformClick.run(View.java:28166)
at android.os.Handler.handleCallback(Handler.java:907)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:216)
at android.app.ActivityThread.main(ActivityThread.java:7464)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:549)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:955)