2017-05-01 42 views
-3

在詢問我經歷了類似的問題並嘗試過它們之後,卻沒有成功,並且每次都以空指針異常結束。 我想要做的就是將字符串中的用戶名從一個活動傳遞給我的標籤活動的另一個片段。 這裏是我的嘗試,從ProfileFragment如何將字符串從活動傳遞到Android中選項卡式活動的片段

@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

的可能的複製[通字符串從片段主要活動片段viewpager活動(http://stackoverflow.com/questions/21573810/pass-string-from-fragment-main-activity -to-片段 - 活性 - 在-viewpager) –

回答

0

我的主要活動代碼

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

和規範正是因爲ProfileFragment尚不可見。你正在開始一個活動而不是片段。

首先,你需要意圖TabbedAct有額外的價值

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

然後,在TabbedAct活動,你需要初始化你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(); 

和代碼從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; 
} 

因爲您沒有ViewPagerAdapter。你可以用我的

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); 
    } 
} 
相關問題