J'ai un tabLayout avec un viewpager avec 5 fragment, je ne sais pas pourquoi mais dans le cinquième fragment quand j'utilise getActivity() même après onActivityCreated il renvoie null, quand dans les autres fragments Je l'utilise dans onCreateView et ça marche bien.Fragment getActivity est null après onActivityCreated avec viewPager
Mon cinquième fragment:
public class SettingsFragment extends Fragment {
private static final String ARG_SECTION_NUMBER = "section_number";
private TextView name,losed_bg,winned_bg,played_bg;
private DatabaseReference mdatabase;
private FirebaseAuth mAuth;
private CircleImageView userpic;
private static final int CAMERA=0,GALLERY=1;
private Typeface font;
private Button logout;
private ProgressBar loading;
private ImageView edit_image;
private EditText edit_text;
private AlertDialog.Builder getImageFrom;
public SettingsFragment() {
}
public static SettingsFragment newInstance(int sectionNumber) {
SettingsFragment fragment = new SettingsFragment();
Bundle args = new Bundle();
args.putInt(ARG_SECTION_NUMBER, sectionNumber);
fragment.setArguments(args);
return fragment;
}
@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
mdatabase= FirebaseDatabase.getInstance().getReference().child("USERS").child(mAuth.getCurrentUser().getUid());
mdatabase.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
name.setText(dataSnapshot.child("name").getValue(String.class));
if(dataSnapshot.hasChild("losed")){
//CRASH String spannable = getActivity().getString(R.string.settings_losed)+" "+String.valueOf(dataSnapshot.child("losed").getValue(Integer.class));
losed_bg.setText(spannable);
}
else{
String spannable =getActivity().getString(R.string.settings_losed)+" "+String.valueOf(0);
losed_bg.setText(spannable);
}
if(dataSnapshot.hasChild("winned")){
String spannable = getActivity().getString(R.string.settings_winned)+" "+String.valueOf(dataSnapshot.child("winned").getValue(Integer.class));
winned_bg.setText(spannable);
}
else{
String spannable = getActivity().getString(R.string.settings_winned) + " " + String.valueOf(0);
winned_bg.setText(spannable);
}
if(dataSnapshot.hasChild("played")){
String spannable = getActivity().getString(R.string.settings_played) + " " + String.valueOf(dataSnapshot.child("played").getValue(Integer.class));
played_bg.setText(spannable);
}
else{
String spannable = getActivity().getString(R.string.settings_played) + " " + String.valueOf(0);
played_bg.setText(spannable);
}
if(dataSnapshot.child("profile_pic").getValue(String.class)!=null) {
getImage();
}
else{
loading.setVisibility(View.INVISIBLE);
userpic.setVisibility(View.VISIBLE);
userpic.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
getImageFrom.show();
}
});
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
}
}
Je reçois
java.lang.IllegalStateException: Fragment SettingsFragment{3ee8ade} not attached to Activity
Et l'activité où je mis en place le tabLayout
public class SectionsPagerAdapter extends FragmentPagerAdapter {
public SectionsPagerAdapter(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int position) {
// getItem is called to instantiate the fragment for the given page.
// Return a PlaceholderFragment (defined as a static inner class below).
switch (position){
case 0:
return MainFragment.newInstance(0);
case 1:
return GamesFragment.newInstance(0);
case 2:
return OfflineFragment.newInstance(0);
case 3:
return FactoryFragment.newInstance(0);
case 4:
return SettingsFragment.newInstance(0);
}
return MainFragment.newInstance(position + 1);
}
@Override
public int getCount() {
return 5;
}
@Override
public CharSequence getPageTitle(int position) {
return null;
}
}
mSectionsPagerAdapter = new SectionsPagerAdapter(getSupportFragmentManager());
// Set up the ViewPager with the sections adapter.
mViewPager = (ViewPager) findViewById(R.id.container);
mViewPager.setAdapter(mSectionsPagerAdapter);
tabLayout = (TabLayout) findViewById(R.id.tabs);
tabLayout.setupWithViewPager(mViewPager);
for (int i = 0; i < tabLayout.getTabCount(); i++) {
switch (i){
case 0:
View view1 = getLayoutInflater().inflate(R.layout.tab_icon_view, null);
view1.findViewById(R.id.icon).setBackgroundResource(R.drawable.ic_home_white_48dp);
tabLayout.getTabAt(i).setCustomView(view1);
break;
case 3:
View view2 = getLayoutInflater().inflate(R.layout.tab_icon_view, null);
view2.findViewById(R.id.icon).setBackgroundResource(R.drawable.factory);
tabLayout.getTabAt(i).setCustomView(view2);
break;
case 1:
View view3 = getLayoutInflater().inflate(R.layout.tab_icon_view, null);
view3.findViewById(R.id.icon).setBackgroundResource(R.drawable.games_icon);
tabLayout.getTabAt(i).setCustomView(view3);
break;
case 2:
View view5 = getLayoutInflater().inflate(R.layout.tab_icon_view, null);
view5.findViewById(R.id.icon).setBackgroundResource(R.drawable.nointernet);
tabLayout.getTabAt(i).setCustomView(view5);
break;
case 4:
View view4 = getLayoutInflater().inflate(R.layout.tab_icon_view, null);
view4.findViewById(R.id.icon).setBackgroundResource(R.drawable.ic_account_circle_white_48dp);
tabLayout.getTabAt(i).setCustomView(view4);
break;
}
}
quelle ligne provoque le NPE? –
Le premier qui obtient la chaîne avec getActivity –
Modifiez this- return MainFragment.newInstance (position + 1); à this- return MainFragment.newInstance (position); –