2015-04-01 3 views
-1

Я пишу простое приложение с прорисовкой, используя viewpager и fullscreen фрагменты. В одном из фрагментов я хочу проверить статус подключения к Интернету, прежде чем отображать некоторые данные, но я не могу получить контекст приложения. Я нашел много тем по этой проблеме, но ни один из решений не работает для меня. Я использую getApplication() внутри фрагмента, но хотя я получаю ошибку "Unreacheable statement".Получение контекста приложения в фрагмент, ViewPager

Любые советы?

import android.support.v4.app.FragmentActivity; 
import android.support.v4.view.ViewPager; 
import android.os.Bundle; 

public class MainActivity extends FragmentActivity { 

ViewPager viewPager; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    //setting fragment view pager 
    viewPager = (ViewPager)findViewById(R.id.pager); 
    PagerAdapter pagerAdapter = new PagerAdapter(getSupportFragmentManager()); 
    viewPager.setAdapter(pagerAdapter); 
    } 
} 

activity_main.xml

<android.support.v4.view.ViewPager 
xmlns:android="http://schemas.android.com/apk/res/android" 
android:id="@+id/pager" 
android:layout_width="match_parent" 
android:layout_height="match_parent"> 
</android.support.v4.view.ViewPager> 

Первый фрагмент

import android.support.v4.app.Fragment; 
import android.os.Bundle; 
import android.support.annotation.Nullable; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 

public class CurrentWeatherFragment extends Fragment { 

//flaga dla statusu polaczenia z internetem 
Boolean isInternetPresent = false; 

//klasa detektora połączenia 
ConnectionDetector cd; 


@Nullable 
@Override 

public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
    View v = inflater.inflate(R.layout.currentweather, container, false); 
    return v; 

    //tworzenie klasy detektora 
    cd = new ConnectionDetector(getActivity().getApplicationContext()); 

    //sprawdzenie czy jest polaczenie z internetem 
    isInternetPresent = cd.isConnectingToInternet(); 
    } 
} 

Пейджер адаптер класса

import android.support.v4.app.Fragment; 
import android.support.v4.app.FragmentManager; 
import android.support.v4.app.FragmentPagerAdapter; 

public class PagerAdapter extends FragmentPagerAdapter { 

public PagerAdapter(FragmentManager fm) { 
    super(fm); 
} 

@Override 
public Fragment getItem(int arg0) { 
    switch (arg0){ 
     case 0: 
      return new CurrentWeatherFragment(); 
     case 1: 
      return new ForecastFragment(); 
     default: 
      break; 
    } 
    return null; 
} 

@Override 
public int getCount() { 
    return 2; 
    } 
} 

ответ

2

В CurrentWeatherFragment «s onCreateView вы раздувать View затем мгновенно вернуть его.

public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
    View v = inflater.inflate(R.layout.currentweather, container, false); 
    return v; 

    //tworzenie klasy detektora 
    cd = new ConnectionDetector(getActivity().getApplicationContext()); 

    //sprawdzenie czy jest polaczenie z internetem 
    isInternetPresent = cd.isConnectingToInternet(); 
} 

Перемещение return v; в конце метода:

public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
    View v = inflater.inflate(R.layout.currentweather, container, false); 

    //tworzenie klasy detektora 
    cd = new ConnectionDetector(getActivity().getApplicationContext()); 

    //sprawdzenie czy jest polaczenie z internetem 
    isInternetPresent = cd.isConnectingToInternet(); 

    return v; 
} 
+0

Это сработало! Это было решение, которое я искал, спасибо :) – drapichrust

0

Может быть проблема жизненного цикла. Убедитесь, что вызов в onAttach(Activity), а не в onCreateView()

+0

хорошо, нет никакой ошибки сейчас, я должен продолжать код в 'onAttach()', чтобы проверить соединение? Я все еще изучаю фрагменты – drapichrust

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