如何通过按下片段中的按钮来更改viewpager中的片段?

时间:2016-04-26 15:39:48

标签: android android-fragments android-viewpager

假设我有三个片段连接到ViewPager,我希望每当我按下片段上的一个按钮时,我会自动滚动到下一个片段。我无法从片段中访问viewpager方法。我该怎么做?

编辑:Nicolas Simon的解决方案在某种程度上有效。现在我在片段上设置界面时遇到问题。

MyFragment fragment1;
fragment1.setInterface(this);

我收到一条错误,指出Null指针访问:fragment1只能在此位置为空。

4 个答案:

答案 0 :(得分:2)

如果每个按钮不同,您必须定义一个界面,以便在您的活动和碎片之间进行通信。

public interface GoToNextInterface {
  void onGoToNext();
}

您的MainActivity必须实现此接口及其附带的方法:

public class MainActivity extends Activity implements GoToNextInterface {
  //Your regular methods...
@Override
public void onGoToNext() {
  if (myAdapter != null) {
    myAdapter.setCurrentItem(myAdapter.getCurrentItem + 1);
  }
}

仍在您的活动中,在片段上设置界面:

fragment1.setInterface(this);
fragment2.setInterface(this);

在您的片段中,添加setInterface方法:

private GoToNextInterface mInterface;

public void setInterface(GoToNextInterface i) {
      mInterface = i;
}

最后在每个片段中,触发效果:

button.setOnClickListener(new View.OnClickListener() {
  @Override
  public void onClick(View v) {
    if (mInterface != null) {
      mInterface.onGoToNext();
    }
  });

答案 1 :(得分:0)

答案 2 :(得分:0)

您可以将setCurrentItem(int)setCurrentItem(int,boolean)与适配器对象一起使用。

myAdapter.setCurrentItem(myAdapter.getCurrentItem()+1)

myAdapter.setCurrentItem(myAdapter.getCurrentItem()-1)

确保myAdapter.getCurrentItem()大于0且小于项目数。

答案 3 :(得分:0)

解决方案非常简单,如果您在设置它时包含ViewPager代码,它会更简单。

无论如何,您需要在ViewPager片段中设置MainActivity时公开该方法,然后设置ViewPager的当前页面,

这是一个例子

//SUPPOSE THIS IS THE METHOD YOUR USING TO SETUP FRAGMENT VIEWPAGER
public void setupViewPager(int pageNumber) {

    Adapter adapter = new Adapter(getChildFragmentManager());
    adapter.addFragment(new FirstFragment(), "First Fragment");
    adapter.addFragment(new SecondFragment(), "Second Fragment");
    viewPager.setAdapter(adapter);
    viewPager.setCurrentItem(pageNumber);
}

然后从片段中你可以通过界面调用它,这是一种更好的方法,你也可以像这样直接调用它

((MainActivity)getActivity).setupViewPager(1) // Here you can give the number of fragment you want to go to starting from 0.

希望有所帮助