首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用buttonClick更改viewpager片段

用buttonClick更改viewpager片段
EN

Stack Overflow用户
提问于 2013-05-26 17:24:24
回答 3查看 32.6K关注 0票数 11

我正试图通过单击一个按钮来更改viewpager片段。我有5个片段,每个片段都有自己的xml文件(片段1.xml、片段2.xml,等等)。每个片段都有5个按钮,应该转到查看器的其他页面。但问题是如何签入FragmentPageAdapter,单击哪个按钮以及如何到达那里?

我会展示我的代码,然后我认为应该是明确的。把它想象成一个在底部有点的主屏幕,我点击一个特定的点,你就会进入相应的屏幕。

FragmentPagerAdapter

代码语言:javascript
复制
public class MyFragmentPagerAdapter extends FragmentPagerAdapter{

    final int PAGE_COUNT = 6;

    /** Constructor of the class */
    public MyFragmentPagerAdapter(FragmentManager fm) {
        super(fm);
    }

    /** This method will be invoked when a page is requested to create */
    @Override
    public Fragment getItem(int arg0) {

        switch(arg0){

        case 0:

            return new Fragment1();

        case 1:
            return new Fragment2();

        case 2:
            return new Fragment3();

        case 3:
            return new Fragment4();

        case 4:
            return new Fragment5();

        default:
            return null;

        }       
    }

    /** Returns the number of pages */
    @Override
    public int getCount() {
        return PAGE_COUNT;
    }
}

Frag1.java

代码语言:javascript
复制
public class Frag1 extends Fragment {

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


        OnClickListener changeFrag = new OnClickListener() {            
            @Override
            public void onClick(View v) {
            /*When I click this button in my fragment, I'd like it to go to fragment 3 for example*/
            }
        };

        ImageButton btnT = (ImageButton) v.findViewById(R.id.frag3);
        btnT.setOnClickListener(changeFrag);

        return v;
    }
}

MainActivity

公共类MainActivity扩展FragmentActivity {

代码语言:javascript
复制
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);/** Getting a reference to the ViewPager defined the layout file */
        ViewPager pager = (ViewPager) findViewById(R.id.pager);

        /** Getting fragment manager */
        FragmentManager fm = getSupportFragmentManager();

        /** Instantiating FragmentPagerAdapter */
        MyFragmentPagerAdapter pagerAdapter = new MyFragmentPagerAdapter(fm);

        /** Setting the pagerAdapter to the pager object */
        pager.setAdapter(pagerAdapter);

       //pager.setPageTransformer(true, new ZoomOutPageTransformer());
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.activity_main, menu);
        return true;
    }
}

这样的事有可能吗?有人能帮我朝正确的方向走吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-05-27 09:24:55

我不知道你到底说了什么“改变”。

如果您询问更改页面显示索引,可以尝试

代码语言:javascript
复制
ViewPager.setCurrentItem(int pageIndex, boolean isSmoothScroll);

或者,如果您在询问更改内容,下面是我所做的

代码语言:javascript
复制
public class MyPagerAdapter extends FragmentStatePagerAdapter
{
  private FragmentManager fragMan;
  private ArrayList<Fragment> fragments=new ArrayList<Fragment>();

  public void clearAll() //You can clear any specified page if you want...
  {
    for(int i=0; i<fragments.size(); i++)
    fragMan.beginTransaction().remove(fragments.get(i)).commit();
    fragments.clear();
    fragments=new ArrayList<Fragment>();
    notifyDataSetChanged();
  }

  public void addList() //Add some new fragment...
  {
    listFrag=new ListFragment();
    fragments.add(list);
  }
}

希望能帮上忙~

票数 23
EN

Stack Overflow用户

发布于 2015-06-13 10:44:32

我发布了一个新的答案,因为--据我所见--真正的答案是对被接受的答案的评论:

“你有两种方法。1)把你的ViewPager对象作为公共静态的,这样你就可以访问你的任何片段。2)保持你的ViewPager作为你的FragmentActivity的成员,从你的片段发送广播意图到FragmentActivity,并访问你的ViewPager对象。”

因此,感谢RRTW给出的答案,但我想改进它。

( 1)不是一种选择。碎片的目的是可重用的,因此它们需要独立于活动。我认为把它们与活动联系起来是一种糟糕的做法,即使--就目前而言--你没有在其他活动中重复使用它。

听起来很好,但我认为需要更多的解释。getAcitivty().sendBroadcast()的目的是向用户系统的所有应用程序发送一个事件。这绝对不是你想要达到的目标。因此,在我看来,最好的答案是使用LoacalBroadcastManager,您可以通过查看that post来了解如何使用它。

票数 6
EN

Stack Overflow用户

发布于 2017-07-12 20:41:45

在主要情况下,只需调用,使您的查看器公开,以便它可以访问从其他java文件(例如。(从片段1.java)

MainActivity.Java:

public static ViewPager pager;

现在,在片段1.java中的Onclick()函数中,只需调用您的mViewPager并将item(片段)设置为您想要加载的任何片段。例如。如果要加载下一个片段,则将其设置为2。

片段1.

代码语言:javascript
复制
public void onClick(View v) {

    ViewPager.setCurrentItem(2);

}
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16761812

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档