I am trying to create a Custom Adapter drawing data from RealmObject():
The RealmObject() returns a string containing title and description delimited by comma, which will be split in the Custom Adapter.
Apparently RealmResults.toArray() is of type Array while the Custom Adapter accepts Array.I tried to convert RealmResults to an Array of String by appending by changing it toresults.toArray() as Array but I'm getting the following error.
**java.lang.ClassCastException: java.lang.Object[] cannot be cast to java.lang.String[]**
Apparently results.toArray() is of type Array while the Custom Adapter accepts Array.
I changed it to but I got an error.
Main Fragment:
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
}
}
Layout file:
<?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>
Custom Adapter:
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)