2017-05-01 7 views
-3

Avant de poser j'ai eu à travers les questions similaires et les ai essayé mais pas de succès et chaque fois que tout se termine par une exception de pointeur nul. Tout ce que je veux faire est de passer le nom d'utilisateur qui est en chaîne d'une activité à un autre fragment de mon activité à onglets. Voici ce que j'ai essayé, mes principaux codes d'activitéComment passer une chaîne d'une activité à un fragment d'une activité à onglets dans android

Bundle bundle = new Bundle(); 
       bundle.putString("NAME", username); 
       //PASS OVER THE BUNDLE TO OUR FRAGMENT 
       ProfileFragment profileFragment = new ProfileFragment(); 
       profileFragment.setArguments(bundle); 

       startActivity(new Intent(MainActivity.this, TabbedAct.class)); 

et les codes de ProfileFragment

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 
    // Inflate the layout for this fragment 
    View rootView = inflater.inflate(R.layout.fragment_profile, container, false); 

    profilename = (TextView) rootView.findViewById(R.id.profile); 

    String name= this.getArguments().getString("NAME"); 

    profilename.setText(name); 

    return rootView; 
} 
+0

double possible de [chaîne passe de l'activité principale de fragments de fragments activité viewpager] (http://stackoverflow.com/questions/21573810/pass-string-from-fragment-main-activity -to-fragments-activity-in-viewpager) –

Répondre

0

c'est parce que ProfileFragment n'est pas encore visible. Vous démarrez une activité non fragmentée.

Tout d'abord, vous devez l'intention du TabbedAct avec une valeur supplémentaire

Intent intent = new Intent(MainActivity.this, TabbedAct.class); 
intent.putExtra("Name", username); 
startActivity(intent); 

Puis, en activité TabbedAct, vous devez initialiser votre ProfileFragment

String username = getIntent().getStringExtra("Name"); 
ViewPagerAdapter adapter = new ViewPagerAdapter(getSupportFragmentManager()); 
viewPagerAdapter.addFragment(ProfileFragment.newInstance(username),"Tab1"); 
viewPagerAdapter.addFragment(Fragment2.newsIntance(),"Tab2"); 
viewPagerAdapter.addFragment(Fragment2.newsIntance(),"Tab3"); 
..... 
viewpager.setAdapter(viewPagerAdapter); 
viewpager.setCurrentItem(0); 
viewPagerAdapter.notifyDataSetChanged(); 

et les codes de ProfileFragment

public static ProfileFragment newInstance(String username) { 
    ProfileFragment f = new ProfileFragment(); 
    Bundle bdl = new Bundle(); 
    bdl.putString("NAME", username); 
    f.setArguments(bdl); 
    return f; 
} 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 
    // Inflate the layout for this fragment 
    View rootView = inflater.inflate(R.layout.fragment_profile, container, false); 

    profilename = (TextView) rootView.findViewById(R.id.profile); 

    String name= this.getArguments().getString("NAME"); 

    profilename.setText(name); 

    return rootView; 
} 

vous ne possédez pas ViewPagerAdapter. Vous pouvez utiliser mes

public class ViewPagerAdapter extends FragmentStatePagerAdapter { 
    private List<Fragment> mFragmentList; 
    private List<String> mFragmentTitleList; 

    public ViewPagerAdapter(FragmentManager manager) { 
     super(manager); 
     mFragmentTitleList = new ArrayList<>(); 
     mFragmentList = new ArrayList<>(); 
    } 

    @Override 
    public Fragment getItem(int index) { 
     return mFragmentList.get(index); 
    } 

    @Override 
    public int getCount() { 
     return mFragmentList.size(); 
    } 

    @Override 
    public int getItemPosition(Object object){ 
     return PagerAdapter.POSITION_NONE; 
    } 
    @Override 
    public void destroyItem(ViewGroup container, int position, Object object) { 
     if (position >= getCount()) { 
      FragmentManager manager = ((Fragment) object).getFragmentManager(); 
      FragmentTransaction trans = manager.beginTransaction(); 
      trans.remove((Fragment) object); 
      trans.commit(); 
     } 
    } 

    public void addFragment(Fragment fragment,String title) { 
     mFragmentList.add(fragment); 
     mFragmentTitleList.add(title); 
    } 

    @Override 
    public CharSequence getPageTitle(int position) { 
     return mFragmentTitleList.get(position); 
    } 
}