Есть ли способ в Kotlin / Java / Android, где вы можете динамически получать список и отображать его на основе намерения Extra

#android #list #kotlin #fragment #webapi

#Android #Список #kotlin #фрагмент #webapi

Вопрос:

Я пытаюсь создать спортивное приложение, и я создал свои действия и фрагменты. В настоящее время я использую массив строк из файла String Resources для получения списка названий команд, и когда вы нажимаете на указанную команду, я запускаю другое действие, чтобы показать вам информацию о команде. В настоящее время я работаю над отображением расписания. Я действительно хотел бы сделать это динамически, получая информацию для команды на основе выбора пользователем команды из списка. Также я хотел бы попытаться получить информацию, возможно, из бесплатного WebAPI, а затем обработать API и отобразить расписание команд на указанной вкладке расписания команды при выборе.

Это фрагмент расписания моей команды, и я просто снова извлекаю список имен команды из строковых ресурсов, потому что я хотел убедиться, что действие / фрагмент был запущен

     package com.adonaubauer.myapplicationone.ui.main

    import android.os.Bundle
    import android.widget.ArrayAdapter
    import androidx.fragment.app.ListFragment
    import com.adonaubauer.myapplicationone.R

    class NflTeamScheduleFragment : ListFragment() {

        var mNum = 0

        override fun onCreate(savedInstanceState: Bundle?) {
            super.onCreate(savedInstanceState)
            mNum = arguments?.getInt("num") ?: 1
            val layout = R.layout.nfl_team_schedule_layout

            // Need to get all the schedules for the teams so it changes for each team
            // Need to change the names of Oakland Raiders -> Las Vegas Raiders
            // Need to change the name of Washington Redskins -> Washington Football Team

            when (activity?.intent?.extras?.get("Team Name")) {
                "Arizona Cardinals" -> listAdapter = activity?.let { ArrayAdapter<String> (it, 
                    layout, resources.getStringArray(R.array.nfl_team_names)) }
                "Atlanta Falcons" -> listAdapter = activity?.let { ArrayAdapter<String> (it,   
                    layout, resources.getStringArray(R.array.nfl_team_names)) }
                "Baltimore Ravens" -> listAdapter = activity?.let { ArrayAdapter<String> (it,  
                    layout, resources.getStringArray(R.array.nfl_team_names)) }
                "Buffalo Bills" -> listAdapter = activity?.let { ArrayAdapter<String> (it,     
                    layout, resources.getStringArray(R.array.nfl_team_names)) }
                "Carolina Panthers" -> listAdapter = activity?.let { ArrayAdapter<String> (it, 
                    layout, resources.getStringArray(R.array.nfl_team_names)) }
                "Chicago Bears" -> listAdapter = activity?.let { ArrayAdapter<String> (it,     
                    layout, resources.getStringArray(R.array.nfl_team_names)) }
                "Cleveland Browns" -> listAdapter = activity?.let { ArrayAdapter<String> (it,  
                    layout, resources.getStringArray(R.array.nfl_team_names)) }
                "Dallas Cowboys" -> listAdapter = activity?.let { ArrayAdapter<String> (it,    
                    layout, resources.getStringArray(R.array.nfl_team_names)) }
                "Denver Broncos" -> listAdapter = activity?.let { ArrayAdapter<String> (it,    
                    layout, resources.getStringArray(R.array.nfl_team_names)) }
                "Detroit Lions" -> listAdapter = activity?.let { ArrayAdapter<String> (it,     
                    layout, resources.getStringArray(R.array.nfl_team_names)) }
                "Green Bay Packers" -> listAdapter = activity?.let { ArrayAdapter<String> (it, 
                    layout, resources.getStringArray(R.array.nfl_team_names)) }
                "Houston Texans" -> listAdapter = activity?.let { ArrayAdapter<String> (it,    
                    layout, resources.getStringArray(R.array.nfl_team_names)) }
                "Indianapolis Colts" -> listAdapter = activity?.let { ArrayAdapter<String> (it, 
                    layout, resources.getStringArray(R.array.nfl_team_names)) }
                "Jacksonville Jaguars" -> listAdapter = activity?.let { ArrayAdapter<String> (it, 
                    layout, resources.getStringArray(R.array.nfl_team_names)) }
                "Kansas City Chiefs" -> listAdapter = activity?.let { ArrayAdapter<String> (it, 
                    layout, resources.getStringArray(R.array.nfl_team_names)) }
                "Los Angeles Chargers" -> listAdapter = activity?.let { ArrayAdapter<String> (it, 
                    layout, resources.getStringArray(R.array.nfl_team_names)) }
                "Los Angeles Rams" -> listAdapter = activity?.let { ArrayAdapter<String> (it,  
                    layout, resources.getStringArray(R.array.nfl_team_names)) }
                "Miami Dolphins" -> listAdapter = activity?.let { ArrayAdapter<String> (it,    
                    layout, resources.getStringArray(R.array.nfl_team_names)) }
                "Minnesota Vikings" -> listAdapter = activity?.let { ArrayAdapter<String> (it, 
                    layout, resources.getStringArray(R.array.nfl_team_names)) }
                "New England Patriots" -> listAdapter = activity?.let { ArrayAdapter<String> (it, 
                    layout, resources.getStringArray(R.array.nfl_team_names)) }
                "New Orleans Saints" -> listAdapter = activity?.let { ArrayAdapter<String> (it, 
                    layout, resources.getStringArray(R.array.nfl_team_names)) }
                "New York Giants" -> listAdapter = activity?.let { ArrayAdapter<String> (it,   
                    layout, resources.getStringArray(R.array.nfl_team_names)) }
                "New York Jets" -> listAdapter = activity?.let { ArrayAdapter<String> (it,     
                    layout, resources.getStringArray(R.array.nfl_team_names)) }
                "Oakland Raiders" -> listAdapter = activity?.let { ArrayAdapter<String> (it,   
                    layout, resources.getStringArray(R.array.nfl_team_names)) }
                "Philadelphia Eagles" -> listAdapter = activity?.let { ArrayAdapter<String> (it, 
                    layout, resources.getStringArray(R.array.nfl_team_names)) }
                "Pittsburgh Steelers" -> listAdapter = activity?.let { ArrayAdapter<String> (it, 
                    layout, resources.getStringArray(R.array.nfl_team_names)) }
                "San Francisco 49ers" -> listAdapter = activity?.let { ArrayAdapter<String> (it, 
                    layout, resources.getStringArray(R.array.nfl_team_names)) }
                "Seattle Seahawks" -> listAdapter = activity?.let { ArrayAdapter<String> (it,  
                    layout, resources.getStringArray(R.array.nfl_team_names)) }
                "Tampa Bay Buccaneers" -> listAdapter = activity?.let { ArrayAdapter<String> (it, 
                    layout, resources.getStringArray(R.array.nfl_team_names)) }
                "Tennessee Titans" -> listAdapter = activity?.let { ArrayAdapter<String> (it,  
                    layout, resources.getStringArray(R.array.nfl_team_names)) }
                "Washington Redskins" -> listAdapter = activity?.let { ArrayAdapter<String> (it,  
                    layout, resources.getStringArray(R.array.nfl_team_names)) }

            }

        //listAdapter = activity?.let { ArrayAdapter<String> (it, layout, 
        // resources.getStringArray(R.array.nfl_team_names)) }

        }

        companion object {
           /**
            *
            * The newInstance method will create new NflTeamsFragment objects and
            * return them with arguments
            *
            * @param num
            * @return
            */
            @JvmStatic
            fun newInstance(num: Int): NflTeamScheduleFragment {

                val nflTeamScheduleFragment = NflTeamScheduleFragment()
                val args = Bundle()
                args.putInt("num", num)
                nflTeamScheduleFragment.arguments = args
                return nflTeamScheduleFragment

            }

        }

    }
  

Итак, скажем, для первой строки в цикле When командой является Arizona Cardinals, я хотел бы отобразить список их расписания на вкладке расписание команды. Теперь, я полагаю, я мог бы зайти и создать массив строк и иметь строковые элементы каждой игры и отображать его таким образом. Но я хотел бы попробовать сделать это динамически, используя WebAPI, чтобы мне не приходилось вводить расписание каждой команды в массив строк в файле ресурсов.

Комментарии:

1. В цикле when вы жестко закодировали названия команд. С самого начала это неправильно. И затем вы извлекаете один и тот же список для каждой команды. Это не имеет смысла.

2. Поэтому используйте WebAPI. Шаги, которые я бы рекомендовал: 1. Добавьте сопрограммы Retrofit и kotlin в качестве зависимостей. 2. Найдите нужный api и напишите для него функцию в retrofit. 3. Напишите класс данных для десериализации данных json из api. 4. Добавьте плагин десериализатора для модернизации (я рекомендую kotlinx-serialization) 5. Вызовите эту функцию через сопрограмму и делайте с данными, что хотите

3. Blackapps, я просто получаю список имен для команд в качестве теста, чтобы убедиться, что это сработало. Я ищу шаги о том, как получить расписание для каждой команды, когда пользователь нажимает на команду в предыдущем действии. Карсон, ты знаешь какой-нибудь бесплатный webapi, знаешь ли ты какие-либо способы, которыми я мог бы создать его сам?