Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/191.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 隐藏另一布局的浮动操作按钮_Java_Android_Floating Action Button_Nestedscrollview - Fatal编程技术网

Java 隐藏另一布局的浮动操作按钮

Java 隐藏另一布局的浮动操作按钮,java,android,floating-action-button,nestedscrollview,Java,Android,Floating Action Button,Nestedscrollview,我有一个FloatingActionButton在五月activity\u main.xmllayout,名为fabBtn 我的应用程序是用一个ViewPager和三个Fragment构建的。当我的第一个Fragment检测到滚动时,我想隐藏FloatingActionButton,但如果用户开始滚动,我会一直得到一个NullPointerException 我相信这可能是因为我的片段无法从activity\u main.xml布局中获取FloatingActionButton 这是我的活动\u

我有一个
FloatingActionButton
在五月
activity\u main.xml
layout,名为
fabBtn

我的应用程序是用一个
ViewPager
和三个
Fragment
构建的。当我的第一个
Fragment
检测到滚动时,我想隐藏
FloatingActionButton
,但如果用户开始滚动,我会一直得到一个
NullPointerException

我相信这可能是因为我的片段无法从
activity\u main.xml
布局中获取
FloatingActionButton

这是我的
活动\u main.xml

    <android.support.design.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/rootLayout"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="lh.com.newme.MainActivity"
xmlns:fab="http://schemas.android.com/tools">

    <android.support.design.widget.AppBarLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

        <android.support.v7.widget.Toolbar
            android:id="@+id/toolbar"
            android:layout_width="match_parent"
            android:layout_height="?attr/actionBarSize"
            android:background="?attr/colorPrimary"
            app:popupTheme="@style/ThemeOverlay.AppCompat.Light"
            app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
            app:layout_scrollFlags="scroll|snap"/>

        <android.support.design.widget.TabLayout
            android:id="@+id/tabLayout"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            app:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar"
            app:tabMode="fixed"
            app:layout_scrollFlags="snap|enterAlways"/>

    </android.support.design.widget.AppBarLayout>

    <android.support.v4.view.ViewPager
        android:id="@+id/viewpager"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        app:layout_behavior="@string/appbar_scrolling_view_behavior"
        android:background="#ffffff" />

    <android.support.design.widget.FloatingActionButton
        android:id="@+id/fabBtn"
        android:layout_marginBottom="@dimen/codelab_fab_margin_bottom"
        android:layout_marginRight="@dimen/codelab_fab_margin_right"
        android:layout_width="wrap_content"
        fab:fab_type="normal"
        android:layout_height="wrap_content"
        android:layout_gravity="bottom|right"
        app:backgroundTint="@color/fab_ripple_color"
        android:src="@drawable/ic_plus"
        app:fabSize="normal"
        />

    </android.support.design.widget.CoordinatorLayout>
这是我的
main活动。类

  public class MainActivity extends AppCompatActivity {


FloatingActionButton fabBtn;
CoordinatorLayout rootLayout;
Toolbar toolbar;
TabLayout tabLayout;

   ...

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    final ViewPager viewPager = (ViewPager) findViewById(R.id.viewpager);
    viewPager.setAdapter(new SampleFragmentPagerAdapter(getSupportFragmentManager()));
    viewPager.setOffscreenPageLimit(2);

    // Give the TabLayout the ViewPager
    final TabLayout tabLayout = (TabLayout) findViewById(R.id.tabLayout);
    tabLayout.setupWithViewPager(viewPager);

    final FloatingActionButton fab = (FloatingActionButton)findViewById(R.id.fabBtn);



    viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
        @Override
        public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
        }

        @Override
        public void onPageSelected(int position) {

            switch (position) {
                case 0:
                    fab.show();
                    ...
                    break;

                case 1:
                    fab.show();
                    ...
                    break;


                case 2:
                    fab.hide();
                    break;

                default:
                    fab.hide();
                    break;
            }
        }

        @Override
        public void onPageScrollStateChanged(int state) {

        }
    });

    initInstances();
}

private void initInstances() {

    toolbar = (Toolbar) findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);
    getSupportActionBar().setHomeButtonEnabled(true);
    rootLayout = (CoordinatorLayout) findViewById(R.id.rootLayout);
    fabBtn = (FloatingActionButton) findViewById(R.id.fabBtn);

}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.main_menu_edit, menu);
    return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
    // Handle action bar item clicks here. The action bar will
    // automatically handle clicks on the Home/Up button, so long
    // as you specify a parent activity in AndroidManifest.xml.
    int id = item.getItemId();

    //noinspection SimplifiableIfStatement
    if (id == R.id.einstellungen) {
        return true;
    }

    return super.onOptionsItemSelected(item);
}
}               

首先,更改您的线路

final FloatingActionButton fab = (FloatingActionButton)findViewById(R.id.fabBtn);


解决方案#1-获取视图(如果需要对象)

然后,在
main活动中为
floatingAction按钮添加getter,如

public FloatingActionButton getFloatingActionButton {
    return fabBtn;
}
最后,在
片段中
调用:

FloatingActionButton floatingActionButton = ((MainActivity) getActivity()).getFloatingActionButton();


解决方案#2-在
MainActivity
中添加两个方法(如果您只需要特定的方法,如
show()
/
hide()

片段中
调用隐藏:

((MainActivity) getActivity()).hideFloatingActionButton();
或显示:

((MainActivity) getActivity()).showFloatingActionButton();

注意

final FloatingActionButton fab = (FloatingActionButton)findViewById(R.id.fabBtn);
如果您使用了多个
活动
,则必须检查它是否正确
活动

if (getActivity() instanceof MainActivity) {
    getActivity().yourMethod(); // your method here
}

在片段中,您的rootView布局不是主布局,您不能期望rootView返回fab按钮。这就是为什么会出现空指针异常

您最好使用界面来检测页面滚动,并通过活动来控制它

public void showFloatingActionButton() {
     fabBtn.show();
};

public void hideFloatingActionButton() {
     fabBtn.hide();
};
((MainActivity) getActivity()).hideFloatingActionButton();
((MainActivity) getActivity()).showFloatingActionButton();
if (getActivity() instanceof MainActivity) {
    getActivity().yourMethod(); // your method here
}