我的MainActivity中有一个ViewPager
。其中的每个页面都是一个 fragment 。因此,每次我向右或向左滑动时,都会创建 fragment 的新实例,并相应地更新 fragment View 。
我还有两个按钮:LEFT
和RIGHT
用于导航。这些按钮在 fragment 内位于,而不在Activity中。用户可以滑动或另选地按下相关按钮在页面之间导航。
这是问题所在:由于我正在通过MainActivity更改 View ,因此如何检测 Activity 中这些按钮的onClick
事件以更新 fragment ?
这是PagerAdapter
类(从所有位置删除了所有不相关的代码):
public class SectionsPagerAdapter extends FragmentPagerAdapter {
public SectionsPagerAdapter(FragmentManager fm) {
super(fm);
}
@Override
public Fragment getItem(int position) {
// logic part for the views.
return PlaceholderFragment.newInstance(sectionNumber, questionStatus, questionOrder, showNext, showPrevious);
}
这是
PlaceHolderFragment
类:public class PlaceholderFragment extends Fragment{
//some global variables
public static PlaceholderFragment newInstance(int sectionNumber, int questionStatus, String questionOrder, boolean showNext, boolean showPrevious) {
PlaceholderFragment fragment = new PlaceholderFragment();
//setting up the arguments
fragment.setArguments(args);
return fragment;
}
public PlaceholderFragment() {
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.explanation_fragment, container, false);
//code for filling up all the views
RightButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//can I do something here?
}
});
return rootView;
}
}
更多信息:
我必须将导航按钮保留在 fragment 本身中,而不要保留在 Activity 中。
最佳答案
在您的 fragment 中编写一个接口(interface),例如:
public class PlaceholderFragment extends Fragment{
private OnButtonClickListener mOnButtonClickListener;
interface OnButtonClickListener{
void onButtonClicked(View view);
}
@Override
public void onAttach(Context context) {
super.onAttach(context);
try {
mOnButtonClickListener = (OnButtonClickListener) context;
} catch (ClassCastException e) {
throw new ClassCastException(((Activity) context).getLocalClassName()
+ " must implement OnButtonClickListener");
}
}
yourButtons.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mOnButtonClickListener.onButtonClicked(v);
}
});
}
在您的主要 Activity 中:
class MainActivity extends AppCompatActivity implements OnButtonClickListener{
@Override
void onButtonClicked(View view){
int currPos=yourPager.getCurrentItem();
switch(view.getId()){
case R.id.leftNavigation:
//handle currPos is zero
yourPager.setCurrentItem(currPos-1);
break;
case R.id.rightNavigation:
//handle currPos is reached last item
yourPager.setCurrentItem(currPos+1);
break;
}
}
}
关于android - 转到ViewPager中的下一页,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36600229/