Я феллинг FragmentPagerAdapterFragmentPagerAdapter - Набор граф и названия асинхронной
public class GameListPagerAdapter extends FragmentPagerAdapter implements IGetGameListTaskListener {
GameList _games;
public int int_items = 6 ;
public GameListPagerAdapter(FragmentManager fm) {
super(fm);
//async task to get a list of games
GetGameListTask getGamesTask = new GetGameListTask(this);
getGamesTask.execute();
}
@Override
public Fragment getItem(int position)
{
Bundle bundle = new Bundle();
bundle.putInt("GameId", position);
//get the generic matchlistfragment and tell it which game it is
MatchListFragment matchListFragment = new MatchListFragment();
matchListFragment.setArguments(bundle);
return matchListFragment; // always return the same fragment, just give it a different game id
}
@Override
public int getCount() {
return int_items;
}
@Override
public CharSequence getPageTitle(int position) {
//NEED HELP - Need to get the tiltle here
//return _games.getGames().get(position-1).getName();
switch (position) {
case 0:
return "One";
case 1:
return "Two";
case 2:
return "Three";
case 3:
return "Four";
case 4:
return "Five";
case 5:
return "Six";
}
return null;
}
@Override
public void onComplete(GameList data) {
//get the data on onPostExecute of my "getGamesTask"
_games = data;
//NEED HELP - need to set the item count here, but it fails**
//int_items = _games.getGames().size();
}
}
Вот мой IGetGameListTaskListener
интерфейс:
public interface IGetGameListTaskListener {
public void onComplete(GameList data);
}
Проблема у меня здесь, я получение списка игр из api, это настраивается как асинхронная задача GetGameListTask
. Затем я хочу создать вкладку для каждой из игр, возвращенных в этом списке.
После того, как у меня есть список игр onComplete(GameList data)
мне нужно установить int_items
, а также int_items
Однако из-за (мое понимание) жизненного цикла FragmentPagerAdapter, эти значения нужно подавать авансом.
Как я смогу обработать эту реализацию асинхронных вкладок для моего FragmentPagerAdapter?
Не создавать объект адаптера заранее. Создайте его в onPostExecute() или после получения результатов. После того, как вы получите результаты, вы можете отправить их как массив или список в конструктор адаптера и использовать их. –
эй, почему бы не выполнить эту GetGameListTask getGamesTask = new GetGameListTask (this); перед вызовом GameListPagerAdapter? и после DoInBackGround Completes вы можете передать GamelIst и установить размер. Есть ли какая-либо проблема с этим подходом? –
@ankitaggarwal это просто переводит проблему на мой просмотрщик. Теперь я должен выполнить фоновое задание в моем представлении перед настройкой viewPager.setAdapter –