【问题标题】:CircularFloatingActionMenu in Fragment of ViewPagerViewPager 片段中的 CircularFloatingActionMenu
【发布时间】:2015-03-15 11:20:05
【问题描述】:

在我的 android 应用程序中,我有 ViewPager 和一些片段。我想在其中一个片段中使用和显示圆形浮动操作按钮菜单,但 FAB 在所有片段中都以某种方式可见。如何解决此问题并仅在一个 Fragment 中显示 FAB。顺便说一句,图书馆:github

Fragment.java

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        //Floating Action Button
        //Create a button to attach the menu
        ImageView movieFAB = new ImageView(getActivity());
        movieFAB.setImageResource(R.drawable.ic_launcher);

        //Create menu items
        FloatingActionButton actionButton = new FloatingActionButton.Builder(getActivity()).setContentView(movieFAB).build();
        ImageView iconSortName = new ImageView(getActivity());
        iconSortName.setImageResource(R.drawable.icon_star);
        ImageView iconSortDate = new ImageView(getActivity());
        iconSortDate.setImageResource(R.drawable.icon_cloud);
        ImageView iconSortRatings = new ImageView(getActivity());
        iconSortRatings.setImageResource(R.drawable.icon_communication);

        SubActionButton.Builder itemBuilder = new SubActionButton.Builder(getActivity());
        SubActionButton buttonSortName = itemBuilder.setContentView(iconSortName).build();
        SubActionButton buttonSortDate = itemBuilder.setContentView(iconSortDate).build();
        SubActionButton buttonSortRatings = itemBuilder.setContentView(iconSortRatings).build();

        //Create the menu with the items
        FloatingActionMenu actionMenu = new FloatingActionMenu.Builder(getActivity())
                .addSubActionView(buttonSortName)
                .addSubActionView(buttonSortDate)
                .addSubActionView(buttonSortRatings)
                .attachTo(actionButton)
                .build();
    }

感谢您的帮助!

【问题讨论】:

    标签: android android-fragments android-activity android-viewpager fragment


    【解决方案1】:

    创建 OnPageChangeListener 的实现,覆盖 onPageSelected 方法。

    @Override
    public void onPageSelected(int position) {
        if (position == VALID_POSITION) {
            fabMenu.setVisibility(View.GONE);
        } else {
            fabMenu.setVisibility(View.VISIBLE);
        }
    }
    

    然后设置到viewPager

    pager.setOnPageChangeListener(....);
    

    希望对你有帮助

    【讨论】:

    • 谢谢你,好主意! Пасибі。你知道,我想添加一个效果可能是你知道如何添加它。让我试着向你解释一下。当用户 srcoll 带有 FAB 的片段时,它会像这里一样移到右侧。 github.com/shell-software/fab/blob/master/demo/…你有什么想法吗?
    【解决方案2】:

    这正是我的 OnPageChangeListener 的设置方式。我做了@Eldar Mensutov 所做的事情,但也确保隐藏按钮!在我下面的具体案例中,我只希望菜单显示在我的第二个片段(pageNumber == 1)上,并为所有其他片段隐藏:

               mViewPager.setOnPageChangeListener(new OnPageChangeListener() {
    
                    @Override
                    public void onPageSelected(int pageNumber) {
                        if (pageNumber == 1) {
                            actionButton.setVisibility(View.VISIBLE);
                            button2.setVisibility(View.VISIBLE);
                            button3.setVisibility(View.VISIBLE);
                            button4.setVisibility(View.VISIBLE);
                            button5.setVisibility(View.VISIBLE);
                        } else {
                            actionButton.setVisibility(View.GONE);
                            button2.setVisibility(View.GONE);
                            button3.setVisibility(View.GONE);
                            button4.setVisibility(View.GONE);
                            button5.setVisibility(View.GONE);
                        }
                        if(pageNumber == 0) {
                            TextView textElement = (TextView) findViewById(R.id.title);
                            textElement.setText("Fragment 1 Title");
    
                            // Do stuff here
    
                        }
                        if(pageNumber == 1) {
                            TextView textElement = (TextView) findViewById(R.id.title);
                            textElement.setText("Fragment 2 Title");
    
                            // Do stuff here
    
                        }
                        else if(pageNumber == 2) {
                            TextView textElement = (TextView) findViewById(R.id.title);
                            textElement.setText("Fragment 3 Title");
    
                            // Do stuff here
    
                        }
    
                        else if(pageNumber == 3) {
                            TextView textElement = (TextView) findViewById(R.id.title);
                            textElement.setText("Fragment 4 Title");
    
                            // Do stuff here
    
                        }
                    }    
                }        
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多