есть приложение и оно как бы все работает, только не получается прикрутить 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: проект
Спасибо огромное заранее!
Дело в том что 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);
Я пишу приложение на Spring-bootКратко о задачи: пользователи будут заливать файлы исходного кода на сервер, и на сервере они будут компилироваться...
У меня вопрос, можно ли компилировать только, к примеру, один класс программыПросто проект огромный, и ждать пока скомпилируется на телефон...
подскажите, как реализовать кнопку, при нажатии которой, выплывает (красиво) под ней список с параметрами, например появляется доп LinearLayout,...
как из этой строки получить строку, понятную простому человеку? Вот что у меня на данный момент есть, но оно не работает корретно(