我已经用BottomAppBar
设置了NavigationDrawer
,但是我无法恢复在此抽屉中选择的片段。
我遵循了许多教程来设置BottomAppBar
,但是我从来没有看到如何从抽屉中进行选择。
这是创建我的抽屉的方式:
public class MaintainerActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_maintainer);
setUpBottomAppBar();
}
private void loadFragment(Fragment fragment) {
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
transaction.replace(R.id.main_container, fragment);
transaction.commit();
}
private void setUpBottomAppBar() {
BottomAppBar bottomAppBar = findViewById(R.id.bottom_app_bar);
setSupportActionBar(bottomAppBar);
bottomAppBar.setNavigationOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
BottomSheetDialogFragment bottomSheetDialogFragment = BottomSheetNavigationMaintainerFragment.newInstance();
bottomSheetDialogFragment.show(getSupportFragmentManager(), "Bottom Sheet Dialog Fragment");
Bundle args = bottomSheetDialogFragment.getArguments();
}
});
bottomAppBar.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
}
});
}
}
最后,这是我的片段代码:
public class BottomSheetNavigationMaintainerFragment extends BottomSheetDialogFragment {
public BottomSheetNavigationMaintainerFragment() {
// Required empty public constructor
}
public static BottomSheetNavigationMaintainerFragment newInstance() {
Bundle args = new Bundle();
BottomSheetNavigationMaintainerFragment fragment = new BottomSheetNavigationMaintainerFragment();
fragment.setArguments(args);
return fragment;
}
private BottomSheetBehavior.BottomSheetCallback mBottomSheetBehaviorCallback = new BottomSheetBehavior.BottomSheetCallback() {
@Override
public void onStateChanged(@NonNull View bottomSheet, int newState) {
if (newState == BottomSheetBehavior.STATE_HIDDEN) {
dismiss();
}
}
@Override
public void onSlide(@NonNull View bottomSheet, float slideOffset) { }
};
@SuppressLint("RestrictedApi")
@Override
public void setupDialog(Dialog dialog, int style) {
super.setupDialog(dialog, style);
//Get the content View
View contentView = View.inflate(getContext(), R.layout.fragment_bottom_navigation_maintainer, null);
dialog.setContentView(contentView);
NavigationView navigationView = contentView.findViewById(R.id.navigation_view);
//implement navigation menu item click event
navigationView.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() {
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem item) {
switch (item.getItemId()) {
case R.id.app_bar_assets:
break;
case R.id.app_bar_items:
break;
}
return false;
}
});
ImageView closeButton = contentView.findViewById(R.id.close_image_view);
closeButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
//dismiss bottom sheet
dismiss();
}
});
//Set the coordinator layout behavior
CoordinatorLayout.LayoutParams params = (CoordinatorLayout.LayoutParams) ((View) contentView.getParent()).getLayoutParams();
CoordinatorLayout.Behavior behavior = params.getBehavior();
//Set callback
if (behavior instanceof BottomSheetBehavior) {
((BottomSheetBehavior) behavior).setBottomSheetCallback(mBottomSheetBehaviorCallback);
}
}
}
因此,我想返回onNavigationItemSelected
方法中的所选项目,但找不到将该片段链接到创建它的活动的方法
答案 0 :(得分:0)
我要在活动中添加一个片段。在其中我称为bottomFragment的片段上,单击按钮可打开底部工作表,而在底部条文本上单击则可在片段中添加吐司。 使用click事件界面创建Dialog类
public class AutoAppSelectrDialogFragment extends BottomSheetDialogFragment {
OnAutoAppSelectPickerListener mListener;
/**
* Factory method.
*
* @return A new instance of fragment ImagePickerDialogFragment.
*/
public static AutoAppSelectrDialogFragment newInstance(boolean showRemove) {
AutoAppSelectrDialogFragment fragment = new AutoAppSelectrDialogFragment();
Bundle bundle = new Bundle();
bundle.putBoolean("showRemove", showRemove);
fragment.setArguments(bundle);
return fragment;
}
@SuppressLint("RestrictedApi")
@Override
public void setupDialog(final Dialog dialog, int style) {
super.setupDialog(dialog, style);
View contentView = View.inflate(getContext(), R.layout.bottom_sheet_auto_run, null);
ButterKnife.bind(this, contentView);
dialog.setCanceledOnTouchOutside(false);
dialog.setContentView(contentView);
}
public void setListener(OnAutoAppSelectPickerListener listener) {
mListener = listener;
}
@OnClick(R.id.txt_1)
public void Click1() {
if (mListener != null)
mListener.onClick1();
dismiss();
}
@OnClick(R.id.txt_2)
public void Click2() {
if (mListener != null)
mListener.onClick2();
dismiss();
}
public interface OnAutoAppSelectPickerListener {
void onClick1();
void onClick2();
}
}
对话XML片段布局bottom_sheet_auto_run
<TextView
android:id="@+id/txt_1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:background="?actionBarItemBackground"
android:gravity="center"
android:padding="@dimen/dp_12"
android:textColor="@color/content_text_color"
android:textSize="@dimen/font_16_sp" />
<TextView
android:id="@+id/txt_2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_gravity="center_vertical"
android:background="?actionBarItemBackground"
android:gravity="center"
android:padding="@dimen/dp_12"
android:textColor="@color/content_text_color"
android:textSize="@dimen/font_16_sp" />
在像这样的片段或活动中单击按钮并使用接口来实现DialougeFragment布局的点击事件时,打开“底部对话”。
public class AutoSartInformation extends Fragment implements AutoAppSelectrDialogFragment.OnAutoAppSelectPickerListener {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
imgAutoStartApp = view.findViewById(R.id.img_auto_start_app);
imgAutoStartApp.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
AutoAppSelectrDialogFragment imagePickerDialogFragment = AutoAppSelectrDialogFragment.newInstance(true);
imagePickerDialogFragment.setCancelable(false);
imagePickerDialogFragment.setListener(AutoSartInformation.this);
imagePickerDialogFragment.show(getActivity().getSupportFragmentManager(), imagePickerDialogFragment.getTag());
}
});
}
@Override
public void onClick1() {
Log.d("Click","1");
open Fragment on click of dialouge first text click
}
@Override
public void onClick2() {
Log.d("Click","2");
}
答案 1 :(得分:0)
如何引入如下界面:
public interface OnItemSelectedListener {
void onItemSelected(int ItemId);
}
让MaintainerActivity像下面这样实现此接口:
public class MaintainerActivity extends AppCompatActivity implements OnItemSelectedListener {
@Override
public void onItemSelected(int ItemId) {
//TODO - do something with this selected item...
}
}
然后在您的BottomSheetNavigationMaintainerFragment中执行以下操作:
private OnItemSelectedListener onItemSelectedListener;
@Override
public void onAttach(Context context) {
super.onAttach(context);
if(context instanceof OnItemSelectedListener){
onItemSelectedListener = (OnItemSelectedListener)context;
}
}
然后,当选择一个项目时:
//implement navigation menu item click event
navigationView.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() {
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem item) {
if(onItemSelectedListener != null){
onItemSelectedListener.onItemSelected(item.getItemId());
}
return false;
}
});