#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, знаешь ли ты какие-либо способы, которыми я мог бы создать его сам?