2016-11-15 3 views
0

У меня есть ListView во фрагменте, и я хочу заполнить список данными из REST API.Заполнение ListView в правильном фрагменте

Запрос REST занимает 1-3 секунды. Теперь я хочу сделать это в фоновом режиме.

Я пробовал с

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 
    // Inflate the layout for this fragment 
    final View view = inflater.inflate(R.layout.fragment_watchlist, container, false); 
    view.postDelayed(new Runnable() { 
     @Override 
     public void run() { 
      //Execute Request in Thread 
      // adapter = .... 
      recyclerView.setAdapter(adapter); 
      recyclerView.setLayoutManager(new LinearLayoutManager(getContext())); 
     } 
    }, 1000); 

    return view; 

Если отладить эту функцию, все выполняется.

Но этот список никогда не нарисован.

ТОЛЬКО: Если я нажму на панель поиска на главной панели приложения. Затем я вижу список.

2 дня назад все работало нормально. Но я не знаю, где ошибка.

Вот моя функция навигации:

@SuppressWarnings("StatementWithEmptyBody") 
@Override 
public boolean onNavigationItemSelected(MenuItem item) { 
    Fragment fragment = null; 
    String title = getString(R.string.app_name); 

    int id = item.getItemId(); 

    if (id == R.id.nav_news) { 
     fragment = new NewsFragment(); 
    } else if (id == R.id.nav_charts) { 
     fragment = new ChartFragment(); 
    } else if (id == R.id.nav_favorites) { 
     fragment = new FavoriteFragment(); 
    } else if (id == R.id.nav_profile) { 
     fragment = new ProfileFragment(); 
    } else if (id == R.id.nav_settings) { 
     throw new NotImplementedException("Fragment not Implemented"); 
    } 

    android.support.v4.app.FragmentTransaction fragmentTransaction = 
      getSupportFragmentManager().beginTransaction(); 
    fragmentTransaction.replace(R.id.fragment_container, fragment); 
    fragmentTransaction.commit(); 

    DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); 
    drawer.closeDrawer(GravityCompat.START); 

    return true; 
} 
+0

Я также согласен с sasikumar, разбиваю задачи на более мелкие методы. Что-то вроде 1. getData() - создайте такой метод, получите данные в фоновом режиме, используя либо AsyncTask, IntentService, либо поток. 2. displayData() - как только вы получите данные и проанализируете их и преобразуете их в объект java, просто используйте объект java для заполнения списка ур-списка. –

+0

Но мне нужно вызвать функцию displayData() в моей функции onCreateView(), чтобы получить объект 'View' фрагмента. Если я пытаюсь использовать 'getView()' в методе displayData(), то представление равно null – Phil795

ответ

0

я предлагаю вам позвонить на ваш REST API oncreateview() фрагмента и установить адаптер в методе веб-ответа апи (проверить успех) .Если вы хотите обновить использование адаптера onResume() в фрагменте.

+0

Вы можете это объяснить больше? Вы имели в виду вызов REST API в 'onCreateView' и адаптер в' onResume'? – Phil795

+0

установить адаптер в ответ на ваш веб-сайт – sasikumar

+0

Но как я могу получить представление вне функции onCreateView? – Phil795

Смежные вопросы