将应用程序上下文放入片段,ViewPager
Getting application context into fragment, ViewPager
我正在使用 viewpager
和 fullscreen
片段编写一个带有滑动视图的简单应用程序。在其中一个片段中,我想在显示一些数据之前检查互联网连接状态,但我无法获取应用程序上下文。我发现了很多关于此问题的主题,但 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()
中进行调用
在 CurrentWeatherFragment
的 onCreateView
中,您给 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;
}
我正在使用 viewpager
和 fullscreen
片段编写一个带有滑动视图的简单应用程序。在其中一个片段中,我想在显示一些数据之前检查互联网连接状态,但我无法获取应用程序上下文。我发现了很多关于此问题的主题,但 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()
在 CurrentWeatherFragment
的 onCreateView
中,您给 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;
}