假设我有三个片段连接到ViewPager,我希望每当我按下片段上的一个按钮时,我会自动滚动到下一个片段。我无法从片段中访问viewpager方法。我该怎么做?
编辑:Nicolas Simon的解决方案在某种程度上有效。现在我在片段上设置界面时遇到问题。
MyFragment fragment1;
fragment1.setInterface(this);
我收到一条错误,指出Null指针访问:fragment1只能在此位置为空。
答案 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)
您可以使用ViewPager的setCurrentItem
方法。
http://developer.android.com/reference/android/support/v4/view/ViewPager.html#setCurrentItem(int)
答案 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.
希望有所帮助