Я пытаюсь создать персонализированный ListView в приложении, которое я создаю после обучения.Учебное пособие работает нормально, если вы хотите запустить ListView из действия, но я пытаюсь заставить его работать изнутри фрагмента, и я не могу понять, как подключить мой адаптер к фрагменту.Кто-нибудь знает, как я мог это выяснить?На данный момент Kotlin является для меня совершенно новым, так что может быть очевидное решение, я просто еще не нашел его.
Я заставил его работать, прикрепляя код к действию, но в моем проекте,Я пытаюсь прикрепить его к фрагменту в панели навигации, но фрагмент не будет обрабатывать код, который работает в действии.
Вот как выглядит код в методе onCreate, когда он присоединен к действию:
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
//listview
var listView = findViewById<ListView>(R.id.listView)
var list = mutableListOf<Model>()
//adding items to the listview
list.add(Model("title one", "description one....", R.drawable.imgone))
list.add(Model("title two", "description two....", R.drawable.imgtwo))
.....
//adapter
listView.adapter = MyListAdapter(this, R.layout.row, list)
//ListView item clicks
listView.setOnItemClickListener { parent, view, position, id ->
if (position == 0){
Toast.makeText(this@MainActivity, "Item One clicked", Toast.LENGTH_LONG).show()
}
if (position == 1){
Toast.makeText(this@MainActivity, "Item Two clicked", Toast.LENGTH_LONG).show()
}
.....
}
}
Вот как выглядит код во фрагменте на данный момент
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
}
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
val view = inflater.inflate(R.layout.fragment_home, container, false)
val listView: ListView = view.findViewById(R.id.homeListView)
val adapter: MyListAdapter
//Not sure how to instantiate MyListAdapter
return view
}
Класс Model выглядит следующим образом
class Model(val title: String, val desc: String, val img: Int)
И MyListAdapter выглядит следующим образом
class MyListAdapter (var mCtx: Context, var resource: Int, var items: List<Model>)
:ArrayAdapter<Model>(mCtx, resource, items){
override fun getView(position: Int, convertView: View?, parent: ViewGroup): View {
val layoutInflater: LayoutInflater = LayoutInflater.from(mCtx)
val view: View = layoutInflater.inflate(resource, null)
val imageView: ImageView = view.findViewById(R.id.list_view_image)
val titleView: TextView = view.findViewById(R.id.list_view_title_txt)
val descTView: TextView = view.findViewById(R.id.list_view_desc_txt)
var mItems: Model = items[position]
imageView.setImageDrawable(mCtx.resources.getDrawable(mItems.img))
titleView.text = mItems.title
descTView.text = mItems.desc
return view
}
}
Мой фрагмент_home.xml использует довольно простой ListView:
<ListView
android:id="@+id/homeListView"
android:layout_width="match_parent"
android:layout_height="match_parent">
</ListView>
Хотя row.xml настраивает внешний вид элементов в моем списке
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:padding="10dp">
<ImageView
android:id="@+id/list_view_image"
android:layout_width="80dp"
android:layout_height="80dp"
android:contentDescription="@string/list_view_img_content_desc"/>
<LinearLayout
android:layout_margin="5dp"
android:layout_gravity="center"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<TextView
android:id="@+id/list_view_title_txt"
android:text="@string/list_view_title"
android:textSize="15sp"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
<TextView
android:id="@+id/list_view_desc_txt"
android:text="@string/list_view_desc"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
</LinearLayout>
</LinearLayout>
Что он должен делать, так это то, что я должен иметь возможность запускать свой настраиваемый ListView измой HomeFragment и оттуда можно будет щелкнуть элемент в списке и отобразить тост (в конце концов, другой фрагмент, но обо всем по порядку).На данный момент у меня есть настроенные строки и ListView готов, но я не могу установить соединение от MyListAdapter к HomeFragment.