Intereting Posts
Ошибка прокси-сервера REST клиента Kotlin Параллельные операции над коллекциями Котлина? Каково поведение Iterable # all & Why Kotlin Char :: class.java! = Char.javaClass Переключатель мертвеца в Котлине Как создать функцию расширения в Kotlin, которая работает с классом? Kotlin – Идиоматический способ проверки массива содержит значение Тесты Spring Boot не используют контекст повторно Как проверить, была ли инициализирована переменная «lateinit»? Мне нужно знать, почему? и если я изменю эту строку на "println (name + two)" ошибка решена? Что означает сигнатура функции Kotlin с T. ()? transformClassesWithDesugar построить ошибку после обновления до AS 3.0 Canary 6 Как обрабатывать доступность в пользовательском представлении, когда он не предназначен для обработки кликов? Невозможно добавить и удалить опцию меню из фрагмента и навигационного ящика Преобразование html-строки в pdf или изображение в Android Регулярное выражение, которое распознает / * … * / note

ListView может отображаться в Activity, но не может отображаться в фрагменте

ListView может отображаться в Activity но не может отображаться во Fragment Однако я использую тот же код в Kotlin с Android Studio 3.0?

И это мой код фрагмента:

 class testFrag : Fragment() { var adapter : mo3dAdapter?=null var listOfMkabala = ArrayList<MeetingDetails>() override fun onCreateView(inflater: LayoutInflater?, container: ViewGroup?, savedInstanceState: Bundle?): View? { return inflater!!.inflate(R.layout.fragment_test, container, false) listOfMkabala .add ( MeetingDetails(" nour1", "ahmed1" , "aya1")) listOfMkabala .add ( MeetingDetails(" nour2", "ahmed2" , "aya2")) listOfMkabala .add ( MeetingDetails(" nour3", "ahmed3" , "aya3")) listOfMkabala .add ( MeetingDetails(" nour4", "ahmed4" , "aya4")) listOfMkabala .add ( MeetingDetails(" nour5", "ahmed5" , "aya5")) listOfMkabala .add ( MeetingDetails(" nour6", "ahmed6" , "aya6")) adapter = mo3dAdapter (context ,listOfMkabala) tv1.adapter = adapter } fun test ( view: View){ } 

это мой адаптер:

 inner class mo3dAdapter: BaseAdapter { var listOfMkabaln= ArrayList<MeetingDetails>() var context:Context?=null constructor(context:Context, listOfMkabaln: ArrayList<MeetingDetails>):super(){ this.listOfMkabaln=listOfMkabaln this.context=context } override fun getView(p0: Int, p1: View?, p2: ViewGroup?): View { val mo3d = listOfMkabaln[p0] var inflator = context!!.getSystemService(Context.LAYOUT_INFLATER_SERVICE) as LayoutInflater var myView = inflator.inflate(R.layout.fragment_test, null) myView.text1.text = mo3d.name1!! myView.text2.text = mo3d.name2!! myView.text3.text = mo3d.name3!! return myView } override fun getItem(p0: Int): Any { return listOfMkabaln[p0] } override fun getItemId(p0: Int): Long { return p0.toLong() } override fun getCount(): Int { return listOfMkabaln.size } } 

    Вы должны сделать оператор возврата после инициализации в своем onCreateView() .

    Вы используете kotlin-android-extensions чтобы получить ваш просмотр напрямую. Если вы используете этот способ, вы можете получить свой LisView только после создания представления.

    Ваш код должен быть таким.

     override fun onCreateView(inflater: LayoutInflater?, container: ViewGroup?, savedInstanceState: Bundle?): View? { return inflater!!.inflate(R.layout.fragment_test, container, false) } override fun onViewCreated(view: View?, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) listOfMkabala .add ( MeetingDetails(" nour1", "ahmed1" , "aya1")) listOfMkabala .add ( MeetingDetails(" nour2", "ahmed2" , "aya2")) listOfMkabala .add ( MeetingDetails(" nour3", "ahmed3" , "aya3")) listOfMkabala .add ( MeetingDetails(" nour4", "ahmed4" , "aya4")) listOfMkabala .add ( MeetingDetails(" nour5", "ahmed5" , "aya5")) listOfMkabala .add ( MeetingDetails(" nour6", "ahmed6" , "aya6")) adapter = mo3dAdapter (context ,listOfMkabala) tv1.adapter = adapter } 

    onViewCreated() после создания представления. Таким образом, он гарантирует, что ваш вид уже создан.

    Вы также использовали тот же макет для своего адаптера.

    В коде адаптера измените R.layout.fragment_test на макет модели.

     var myView = inflator.inflate(R.layout.fragment_test, null) 

    Надеюсь, поможет:)

    Вы написали код в onCreateView после оператора return который мы назвали мертвым кодом (код которого недоступен). Таким образом, вы никогда не устанавливаете свой адаптер в ListView .

    Следуйте 3 шагам в качестве общего подхода –

    1. Инициализировать все данные в методе onCreate . В вашем случае туда ArrayList данные в ArrayList .

    так что это будет выглядеть –

     override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) listOfMkabala .add ( MeetingDetails(" nour1", "ahmed1" , "aya1")) listOfMkabala .add ( MeetingDetails(" nour2", "ahmed2" , "aya2")) listOfMkabala .add ( MeetingDetails(" nour3", "ahmed3" , "aya3")) listOfMkabala .add ( MeetingDetails(" nour4", "ahmed4" , "aya4")) listOfMkabala .add ( MeetingDetails(" nour5", "ahmed5" , "aya5")) listOfMkabala .add ( MeetingDetails(" nour6", "ahmed6" , "aya6")) } 
    1. Только onCreateView свой ресурс макета в onCreateView . Как это –

        override fun onCreateView(inflater: LayoutInflater?, container: ViewGroup?, savedInstanceState: Bundle?): View? { return inflater!!.inflate(R.layout.fragment_test, container, false) } 
    2. Что связано с отображением данных в пользовательском интерфейсе, что должно быть сделано в методе onViewCreated . В вашем случае это должно понравиться –

       override fun onViewCreated(view: View?, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) adapter = mo3dAdapter (context ,listOfMkabala) // Init your listview tv1 = view?.findViewById(R.id.your_listview_id); tv1.adapter = adapter } 

    Убедитесь, что вы tv1 и это должно быть ссылка ListView .