2015-11-19 40 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发送数据,但如果可能的话,我会建议使用标签。

相关问题