将按钮放在viewPager的最后一页上

时间:2015-01-02 07:48:10

标签: android android-fragments android-viewpager

我试图在viewPager的最后一页上显示一个按钮(其中包含片段中的图像)。在这些片段中,我创建了一个在显示最后一页之前不可见的按钮。到目前为止,我已经实现了这种行为,但我有一个错误,在第2页出现按钮,即使我显示"显示" (使用 setVisibility(View.VISIBLE))仅当当前页面大于或等于3时才按钮(总共有5页,并且因为viewPager.getCurrentItem(大于或等于3) )表现奇怪并且不会将最后一页或第一页计为索引)。

我的自定义片段 onCreateView()如下所示:

public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    View root = inflater.inflate(R.layout.imageview, container, false);
    ivImage = (ImageView) root.findViewById(R.id.ivImageView);

    btn_register = (Button) root.findViewById(R.id.button_register);

    if( ((WelcomeActivity) this.getActivity()).test()>=3){
        btn_register.setVisibility(View.VISIBLE);
    } 

    setImageInViewPager();
    return root;
}

在我的主要活动中, test()方法只返回viewPager所在的当前页面:

public int test(){
    return(viewPage.getCurrentItem());
}

我怎样才能更好地检测viewpager的最后一页并使用它,以便我只在用户位于viewpager的最后一页时显示按钮?谢谢!

修改 这是问题的video。 以下是我的 src 文件夹的内容:WelcomeActivity.javaFragmentPagerAdapter.javaImages.javaFragmentImageView.java

2 个答案:

答案 0 :(得分:0)

在onPageSelected()中,检查位置:if(position == 5)然后显示按钮。在这里我用过  5因为你提到有5页。

@Override
public void onPageSelected(int position) {
    if(position == 5)
    btn_register.setVisibility(View.VISIBLE);
}

试试这个希望它会对你有所帮助:)。

答案 1 :(得分:0)

您需要以某种方式将片段数量与各个片段联系起来。这样每个片段都知道它的索引。您可以添加代码,了解如何以及何时创建/添加片段到view-pager? 基于此,您可以向参数包添加一个参数,同时通过片段初始化片段,在视图分页器中知道它的索引。
或者试试这个,

private int mCurrentPageSelected;   
// In your activity    
@Override
public void onPageSelected(int position) {
    mCurrentPageSelected = position;
}

public int getSelectedPagePosition(){
    return mCurrentPageSelected;
}

// In your fragment
public void onAttach(){
    Log.d(TAG, "Fragment attached and current selected position is" + etActivity().getSelectedPagePosition());
    if(getActivity().getSelectedPagePosition() >= 3){
        // show the btn
        btn_register.setVisibility(View.VISIBLE);
    }else{
        //hide the button
       btn_register.setVisibility(View.GONE);
    }
}