2015-11-19 108 views
0

我有三個選項卡,選項卡1中片段的列表,我想發送項目的位置,我單擊選項卡2中的片段2,並將viewpager切換到tab2。我正在使用一個接口來發送位置到主要活動工作正常,調用片段二中的方法傳遞它的位置正在返回一個空指針異常和viewpager不切換。如何通過單擊選項卡1中的按鈕切換到選項卡2?

的方法,MainActivity

@Override 
public void respond(int i) { 
    Toast.makeText(MainActivity.this,"INSIDE MAINACTIVITY AND i = "+i,Toast.LENGTH_SHORT).show(); 
    try { 
     Bundle args = new Bundle(); 
     args.putInt("chapters",i); 
     PhpFragment f2 = new PhpFragment(); 
     f2.setArguments(args); 
     actionBar = getActionBar(); 
     actionBar.setSelectedNavigationItem(1); 
     viewPager.setCurrentItem(1); 

    }catch (Exception ex){ 
     Toast.makeText(MainActivity.this,"Error from MAIN = "+ ex.toString(),Toast.LENGTH_LONG).show(); 
    } 
} 

我FragmentPagerAdapter

public class FragmentPageAdapter extends FragmentPagerAdapter { 
    public FragmentPageAdapter(FragmentManager fm) { 
     super(fm); 
    } 

    @Override 
    public Fragment getItem(int i) { 
     switch (i){ 
      case 0: 
       return new JavaFragment(); 
      case 1: 
        return new PhpFragment(); 
      case 2: 
       return new NetFragment(); 
     } 
     return null; 
    } 

    @Override 
    public int getCount() { 
     return 3; 
    } 
} 

回答

0

如果我按照你的問題...應該比你調查一下。

fragments communication in view pager

或者另一個技巧是..

您使用ViewPager,你可以利用它的優勢。您可以將代碼添加到ViewPager這樣的:

活動:

pager.setTag("some text"); // pager is a ViewPager object 

然後你就可以得到這樣的片段通過ViewGroup中這樣的數據:

片段:

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
    View view = inflater.inflate(R.layout.fragment_main, container, false); 

    String result = container.getTag().toString(); 
    // do something with the result 

    return view; 

您還可以將setTag()設置爲片段中的容器。

另一種解決方案(迄今未提及)是通過SharedPreferences發送數據,但如果可能的話,我會建議使用標籤。

相關問題