将应用程序上下文放入片段,ViewPager

Getting application context into fragment, ViewPager

我正在使用 viewpagerfullscreen 片段编写一个带有滑动视图的简单应用程序。在其中一个片段中,我想在显示一些数据之前检查互联网连接状态,但我无法获取应用程序上下文。我发现了很多关于此问题的主题,但 none 的解决方案对我有用。我在片段中使用 getApplication() 但即使出现错误 "Unreacheable statement".

有什么建议吗?

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();
    }
}

传呼机适配器class

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;
    }
}

可能是生命周期问题。在 onAttach(Activity) 而不是 onCreateView()

中进行调用

CurrentWeatherFragmentonCreateView 中,您给 View 充气,然后立即 return 它。

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;
}