Программная обработка bottomsheetbehavior

184
04 сентября 2018, 18:20

есть приложение и оно как бы все работает, только не получается прикрутить bottomsheetbehavior - постоянно вылетает в строчке изменения состояния. Подскажите пожалуйста что я делаю не так?

Код MainActivity:

public class MainActivity extends AppCompatActivity {
private static final int LAYOUT = R.layout.activity_main;
private static final int THEME_LAYOUT = R.style.AppDefault;
private BottomFragmentSetting bottomFragmentSetting;
Toolbar toolbar;
ViewPager viewPager;
@Override
protected void onCreate(Bundle savedInstanceState) {
    setTheme(THEME_LAYOUT);
    super.onCreate(savedInstanceState);
    setContentView(LAYOUT);
    bottomFragmentSetting = new BottomFragmentSetting();
    initToolbar();
    initTabLayout();
}
private void initToolbar(){
    toolbar = findViewById(R.id.toolbar);
    toolbar.setTitle(R.string.app_name);
    toolbar.setOnMenuItemClickListener(new Toolbar.OnMenuItemClickListener() 
{
    @Override
    public boolean onMenuItemClick(MenuItem item) {
        switch (item.getItemId()){
            case R.id.settingFiltr:
                //i'm need help in using change bottomSheetBehavior state
                //bottomFragmentSetting.show();
                break;
            default:
                break;
        }
        return true;
    }
});
toolbar.inflateMenu(R.menu.menu);
}
private void initTabLayout() {
    viewPager = findViewById(R.id.viewPager);
    TabsPagerFragmentAdapter tabsPagerFragmentAdapter = new 
    TabsPagerFragmentAdapter(this, getSupportFragmentManager());
    viewPager.setAdapter(tabsPagerFragmentAdapter);
    viewPager.setCurrentItem(Constants.TAB_ONE);
    TabLayout tabLayout  = findViewById(R.id.tabLayoutMain);
    tabLayout.setupWithViewPager(viewPager);
   }
}

Вот код обработчика:

public class BottomFragmentSetting extends AppCompatActivity {
public BottomSheetBehavior bottomSheetBehavior;
public LinearLayout linearLayout;
public void show(){
    if (bottomSheetBehavior.getState() == BottomSheetBehavior.STATE_HIDDEN) 
{
    bottomSheetBehavior.setState(BottomSheetBehavior.STATE_EXPANDED);
} else {
    bottomSheetBehavior.setState(BottomSheetBehavior.STATE_COLLAPSED);
}
}
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.fragment_dialog_filtr);
linearLayout = findViewById(R.id.bottom_sheet);
bottomSheetBehavior = BottomSheetBehavior.from(linearLayout);
bottomSheetBehavior.setState(BottomSheetBehavior.STATE_HIDDEN);
//bottomSheetBehavior.setPeekHeight(340);
bottomSheetBehavior.setHideable(false);
bottomSheetBehavior.setBottomSheetCallback(new 
BottomSheetBehavior.BottomSheetCallback() {
    @Override
    public void onStateChanged(@NonNull View bottomSheet, int newState) {
        if (newState == BottomSheetBehavior.STATE_DRAGGING) {
 bottomSheetBehavior.setState(BottomSheetBehavior.STATE_EXPANDED);
        }
    }
    @Override
    public void onSlide(@NonNull View bottomSheet, float slideOffset) {
    }
});

} }

Если нужно больше кода - вот весь проект на github: проект

Спасибо огромное заранее!

Answer 1

Дело в том что onCreate у класса BottomFragmentSetting не выполняется, так как Вы его создали не системными средствами. Но в Вашем случае этот класс не должен быть ни активностью ни фрагментом, так как BottomSheetBehavior управляет частью разметки активности, а не отдельным компонентом.
Вам нужно перенести код в конструктор класса:

public class BottomFragmentSetting { // наследование не нужно
    public BottomSheetBehavior bottomSheetBehavior;
    public LinearLayout linearLayout;
    public void show(){
        // Ваш код
    }
    public BottomFragmentSetting(Activity activity) {
        linearLayout = activity.findViewById(R.id.bottom_sheet);
        bottomSheetBehavior = BottomSheetBehavior.from(linearLayout);
        // остальной код из onCreate
    }
}

И в MainActivity создаём класс так:

bottomFragmentSetting = new BottomFragmentSetting(MainActivity.this);
READ ALSO
Удаление скомпилированных файлов

Удаление скомпилированных файлов

Я пишу приложение на Spring-bootКратко о задачи: пользователи будут заливать файлы исходного кода на сервер, и на сервере они будут компилироваться...

176
Ускорить gradle build, Android Studio

Ускорить gradle build, Android Studio

У меня вопрос, можно ли компилировать только, к примеру, один класс программыПросто проект огромный, и ждать пока скомпилируется на телефон...

190
Всплывающее меню под кнопкой

Всплывающее меню под кнопкой

подскажите, как реализовать кнопку, при нажатии которой, выплывает (красиво) под ней список с параметрами, например появляется доп LinearLayout,...

149
Java unicode decode

Java unicode decode

как из этой строки получить строку, понятную простому человеку? Вот что у меня на данный момент есть, но оно не работает корретно(

212