2013-03-01 120 views
2

FragmentPagerSupport是一个FragmentActivity类,FragmentA和FragmentB代表2个不同的选项卡。在第一个选项卡中,我有一个EditText和一个按钮。我的任务是在按钮点击需要打开第二个选项卡,并显示第二个选项卡中的EditText值。我也在使用FragmentStatePagerAdapter。如何更改Android上的按钮点击标签?

下面的代码是构建标签的onCreate()FragmentActivity的:

for (int i = 0; i < mSectionsPagerAdapter.getCount(); i++) { 
     actionBar.addTab(actionBar.newTab() 
       .setText(mSectionsPagerAdapter.getPageTitle(i)) 
       .setTabListener(this)); 
    } 

我在FragmentStatePagerAdapter代码如下:

public Fragment getItem(int position) { 
    Fragment fragment = null; 
    Bundle args = new Bundle();   
    switch (position) { 
    case 0: 
     fragment = FragmentA(); 
     args.putInt(FragmentA.ARG_SECTION_NUMBER, position + 1); 
     fragment.setArguments(args); 
    break; 
    case 1: 
     fragment = new FragmentB(); 
     args.putInt(FragmentB.ARG_SECTION_NUMBER, position + 1); 
     fragment.setArguments(args); 
    break; 
    } 
return fragment; 
} 

我的按钮点击FragmentA的代码如下:

confirmButton.setOnClickListener(new View.OnClickListener() { 
    public void onClick(View view) { 


    } 
} 

现在我卡在这里。找不到应该在这里调用第二个选项卡的代码,并根据tab1 EditText值显示值。

回答

8

假设您的ViewPager名为mPager:

public void onClick(View view) 
{ 
    mPager.setCurrentItem(1); // Change to page 1, i.e., FragmentB 
} 

我建议详细阅读this培训页面。它涉及到用于将信息从片段传递到片段的一些策略(通常通过让活动实现片段可以调用的接口)。

这真的取决于你想要你的片段是多么耦合。你当然可以使用类似

((FragmentB)getActivity().getSupportFragmentManager().findFragmentByTag(
    "android:switcher:" + pager.getId() + ":1")).setExitText(text) 

将文本从FragmentA传递给FragmentB,而是紧密结合的片段,彼此的ViewPager活动包含的内容。

我建议

  1. 让您的活动实现一个包含一个方法,如goToFragmentB(字符串exitText)
  2. 调用此方法可在FragmentA的onClick
  3. 有无goToFragmentB接口:
    • 调用FragmentB中的setExitText(使用上面的findFragmentByTag使用每个ViewPager source的奇数标签)
    • Set寻呼机FragmentB
+0

谢谢,但我将如何得到ViewPager在FragmentA? – ray 2013-03-01 05:43:22

+1

getActivity()。findViewById(R.id.pager)应该可以工作(使用ViewPager的任何ID)。 – ianhanniballake 2013-03-01 05:51:32

+0

非常感谢。真的行。现在请为我的另一个问题提供解决方案 - 我如何将第一个选项卡ExitText(用户输入)的值传递给第二个选项卡? – ray 2013-03-01 05:58:14