Android 在活动开始时将片段加载到FrameLayout中
我使用一个主要活动和一个用于显示片段的FrameLayout: 我的问题是,因为我使用的是FrameLayout而不是Fragment,所以Fragment不会自动加载到我的FrameLayout中。是的,我可以简单地将片段添加到onCreate中的布局中,但问题是每次方向更改时都会加载该片段,从而替换当前片段(使用我在onCreate中指定的片段) 变化片段Android 在活动开始时将片段加载到FrameLayout中,android,android-studio,android-layout,android-fragments,Android,Android Studio,Android Layout,Android Fragments,我使用一个主要活动和一个用于显示片段的FrameLayout: 我的问题是,因为我使用的是FrameLayout而不是Fragment,所以Fragment不会自动加载到我的FrameLayout中。是的,我可以简单地将片段添加到onCreate中的布局中,但问题是每次方向更改时都会加载该片段,从而替换当前片段(使用我在onCreate中指定的片段) 变化片段 mainWindowFragment = new Login(); MainWindowFragmentChange("LoginVi
mainWindowFragment = new Login();
MainWindowFragmentChange("LoginView");
MainWindowFragmentChange函数
private void MainWindowFragmentChange(String fragmentTag)
{
mainWindowFragmentManager = getSupportFragmentManager();
mainWindowFragmentTransaction = mainWindowFragmentManager.beginTransaction();
mainWindowFragmentTransaction.setCustomAnimations(R.animator.slide_in_right, R.animator.slide_out_left);
mainWindowFragmentTransaction.addToBackStack(fragmentTag);
mainWindowFragmentTransaction.replace(R.id.mainActivityFragment, mainWindowFragment, fragmentTag);
mainWindowFragmentTransaction.commit();
}
我的活动\u main\u window.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:background="#ffffff"
tools:context=".MainWindow"
android:fitsSystemWindows="true">
<include
android:id="@+id/app_bar"
layout="@layout/app_bar" />
<android.support.v4.widget.DrawerLayout
android:id="@+id/nav_drawer_layout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_below="@+id/app_bar">
<LinearLayout
android:layout_height="wrap_content"
android:layout_width="match_parent"
android:orientation="vertical">
<!--<TextView
android:id="@+id/countOfFragments"
android:layout_height="wrap_content"
android:layout_width="match_parent"
android:text="Fragments count in back stack: 0"/>-->
<FrameLayout
android:name="com.schwabe.vossloh.linahome.GroupView"
android:id="@+id/mainActivityFragment"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</LinearLayout>
<android.support.design.widget.NavigationView
android:id="@+id/nav_drawer"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_gravity="start"
android:fitsSystemWindows="true"
app:menu="@menu/nav_drawer_items"
app:headerLayout="@layout/nav_drawer_header"/>
</android.support.v4.widget.DrawerLayout>
</RelativeLayout>
MainWindow.java
public class MainWindow extends AppCompatActivity {
private ImageView btn_Menu;
private ImageView btn_addLight;
private AnimatedVectorDrawableCompat menuToArrow;
private AnimatedVectorDrawableCompat arrowToMenu;
private boolean isShowingNavDraver = false;
private DrawerLayout navDrawerLayout;
private Fragment mainWindowFragment;
private FragmentManager mainWindowFragmentManager;
private FragmentTransaction mainWindowFragmentTransaction;
private TextView countOfFragments;
@Override
protected void onStart() {
super.onStart();
navDrawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED);
}
@Override
public void onBackPressed() {
if(this.navDrawerLayout.isDrawerVisible(GravityCompat.START))
{
this.navDrawerLayout.closeDrawer(GravityCompat.START);
btn_Menu.setImageDrawable(arrowToMenu);
arrowToMenu.start();
isShowingNavDraver = !isShowingNavDraver;
}
else
{
super.onBackPressed();
System.exit(0);
}
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main_window);
AppCompatDelegate.setCompatVectorFromResourcesEnabled(true);
mainWindowFragmentManager = getSupportFragmentManager();
btn_Menu = findViewById(R.id.btn_menu);
navDrawerLayout = findViewById(R.id.nav_drawer_layout);
menuToArrow = AnimatedVectorDrawableCompat.create(this, R.drawable.animation_menu_to_arrow);
arrowToMenu = AnimatedVectorDrawableCompat.create(this, R.drawable.animation_arrow_to_menu);
btn_Menu.setImageDrawable(menuToArrow);
btn_Menu.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v)
{
if(!isShowingNavDraver && !isFragmentActive("QRreader"))
{
btn_Menu.setImageDrawable(menuToArrow);
menuToArrow.start();
navDrawerLayout.openDrawer(Gravity.LEFT);
isShowingNavDraver = !isShowingNavDraver;
}
else if(isShowingNavDraver && !isFragmentActive("QRreader"))
{
btn_Menu.setImageDrawable(arrowToMenu);
arrowToMenu.start();
navDrawerLayout.closeDrawers();
isShowingNavDraver = !isShowingNavDraver;
}
else if(isFragmentActive("QRreader"))
{
btn_Menu.setImageDrawable(arrowToMenu);
arrowToMenu.start();
mainWindowFragmentManager.popBackStack();
}
}
});
final NavigationView navDrawerView = findViewById(R.id.nav_drawer);
navDrawerView.setNavigationItemSelectedListener(
new NavigationView.OnNavigationItemSelectedListener() {
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem menuItem) {
switch (menuItem.getItemId())
{
case R.id.group_view_menuitem:
mainWindowFragment = new GroupView();
MainWindowFragmentChange(menuItem, "GroupView");
break;
case R.id.list_view_menuitem:
mainWindowFragment = new ListView();
MainWindowFragmentChange(menuItem, "ListView");
break;
case R.id.login_menuitem:
mainWindowFragment = new Login();
MainWindowFragmentChange(menuItem, "LoginView");
break;
}
isShowingNavDraver = !isShowingNavDraver;
return true;
}
}
);
btn_addLight = findViewById(R.id.btn_add_light);
btn_addLight.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if(isFragmentActive("GroupView") || isFragmentActive("ListView")) {
btn_Menu.setImageDrawable(menuToArrow);
menuToArrow.start();
mainWindowFragment = new QRreader();
MainWindowFragmentRightToLeft("QRreader");
}
}
});
}
private void MainWindowFragmentChange(MenuItem menuItem, String fragmentTag)
{
mainWindowFragmentManager = getSupportFragmentManager();
cleanBackStack();
mainWindowFragmentTransaction = mainWindowFragmentManager.beginTransaction();
mainWindowFragmentTransaction.addToBackStack(fragmentTag);
mainWindowFragmentTransaction.replace(R.id.mainActivityFragment, mainWindowFragment, fragmentTag);
mainWindowFragmentTransaction.commit();
menuItem.setChecked(true);
btn_Menu.setImageDrawable(arrowToMenu);
arrowToMenu.start();
navDrawerLayout.closeDrawers();
}
private void MainWindowFragmentChange(String fragmentTag)
{
mainWindowFragmentManager = getSupportFragmentManager();
mainWindowFragmentTransaction = mainWindowFragmentManager.beginTransaction();
mainWindowFragmentTransaction.addToBackStack(fragmentTag);
mainWindowFragmentTransaction.replace(R.id.mainActivityFragment, mainWindowFragment, fragmentTag);
mainWindowFragmentTransaction.commit();
}
private void MainWindowFragmentRightToLeft(String fragmentTag)
{
mainWindowFragmentManager = getSupportFragmentManager();
mainWindowFragmentTransaction = mainWindowFragmentManager.beginTransaction();
mainWindowFragmentTransaction.setCustomAnimations(R.animator.slide_in_right, R.animator.slide_out_left);
mainWindowFragmentTransaction.addToBackStack(fragmentTag);
mainWindowFragmentTransaction.replace(R.id.mainActivityFragment, mainWindowFragment, fragmentTag);
mainWindowFragmentTransaction.commit();
}
private boolean isFragmentActive(String nameOfFragment)
{
Fragment fragment = getSupportFragmentManager().findFragmentByTag(nameOfFragment);
return fragment != null;
}
private void cleanBackStack()
{
for(int i = 0; i < mainWindowFragmentManager.getBackStackEntryCount(); ++i)
mainWindowFragmentManager.popBackStack();
}
public类主窗口扩展AppCompative活动{
私有图像查看btn_菜单;
私有图像视图btn_addLight;
私有动画矢量绘图兼容菜单箭头;
私有动画矢量绘图兼容箭头菜单;
私有布尔值isShowingNavDraver=false;
私人抽屉布局导航抽屉布局;
私有片段;
私有碎片管理器主窗口碎片管理器;
私有碎片事务mainWindowFragmentTransaction;
私有文本视图countOfFragments;
@凌驾
受保护的void onStart(){
super.onStart();
navDrawerLayout.setDrawerLockMode(DrawerLayout.LOCK\u MODE\u LOCKED\u CLOSED);
}
@凌驾
public void onBackPressed(){
if(this.navDrawerLayout.isDrawervible(GravityCompat.START))
{
this.navDrawerLayout.closeDrawer(GravityCompat.START);
btn_菜单。可设置图像绘制(箭头至菜单);
arrowToMenu.start();
isShowingNavDraver=!isShowingNavDraver;
}
其他的
{
super.onBackPressed();
系统出口(0);
}
}
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity\u主窗口);
AppCompatDelegate.setCompatVectorFromResourcesEnabled(true);
mainWindowFragmentManager=getSupportFragmentManager();
btn_菜单=findViewById(R.id.btn_菜单);
导航抽屉布局=findViewById(R.id.nav_抽屉布局);
menuToArrow=AnimatedVectorDrawableCompat.create(这是R.drawable.animation菜单到箭头);
arrowToMenu=AnimatedVectorDrawableCompat.create(这是R.drawable.animation\u arrow\u to\u菜单);
btn_菜单。可设置图像绘制(菜单箭头);
btn_Menu.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v)
{
如果(!isShowingNavDraver&!isFragmentActive(“QRreader”))
{
btn_菜单。可设置图像绘制(菜单箭头);
menuToArrow.start();
navDrawerLayout.openDrawer(重力,左);
isShowingNavDraver=!isShowingNavDraver;
}
否则如果(isShowingNavDraver&!isFragmentActive(“QRreader”))
{
btn_菜单。可设置图像绘制(箭头至菜单);
arrowToMenu.start();
navDrawerLayout.closeDrawers();
isShowingNavDraver=!isShowingNavDraver;
}
else if(isFragmentActive(“QRreader”))
{
btn_菜单。可设置图像绘制(箭头至菜单);
arrowToMenu.start();
mainWindowFragmentManager.popBackStack();
}
}
});
最终导航视图navDrawerView=findViewById(R.id.nav_抽屉);
navDrawerView.setNavigationItemSelectedListener(
新建NavigationView.OnNavigationItemSelectedListener(){
@凌驾
公共布尔值onNavigationItemSelected(@NonNull MenuItem MenuItem){
开关(menuItem.getItemId())
{
案例R.id.组\视图\菜单项:
mainWindowFragment=新的组视图();
MainWindowFragmentChange(菜单项,“组视图”);
打破
案例R.id.列表\视图\菜单项:
mainWindowFragment=新建ListView();
MainWindowFragmentChange(菜单项,“列表视图”);
打破
案例R.id.login\u菜单项:
mainWindowFragment=新登录名();
MainWindowFragmentChange(菜单项,“登录视图”);
打破
}
isShowingNavDraver=!isShowingNavDraver;
返回true;
}
}
);
btn_addLight=findviewbyd(R.id.btn_add_light);
btn_addLight.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图){
如果(isFragmentActive(“GroupView”)| isFragmentActive(“ListView”)){
btn_菜单。可设置图像绘制(菜单箭头);
menuToArrow.start();
mainWindowFragment=新的QRreader();
MainWindowFragmentRightToLeft(“QRreader”);
}
}
});
}
private void MainWindowFragmentChange(MenuItem MenuItem,字符串fragmentTag)
{
mainWindowFragmentManager=getSupportFragmentManager();
cleanback();
mainWindowFragmentTransaction=mainWindowFragmentManager.beginTransaction();
mainWindowFragmentTransaction.addToBackStack(fragmentTag);
mainWindowFragmentTransaction.replace(R.id.mainActivityFragment,mainWindowFragment,fragmentTag);
mainWindowFragmentTransaction.commit();
menuItem.setChecked(true);
btn_菜单。可设置图像绘制(箭头至菜单);
arrowToMenu.start();
navDrawerLayout.closeDrawers();
}
private void MainWindowFragmentChange(字符串fragmentTag)
{
mainWindowFragmentManager=getSupportFragmentManager();
mainWindowFragmentTransaction=mainWindowFragmentManager.beginTransaction();
mainWindowFragmentTransaction.addToBackStack(fragmentTag);
mainWindowFragmentTransaction.replace(R.id.mainActivityFragment,mainWindowFragment,fragmentTag);
主窗口片段事务
protected void onCreate(Bundle savedInstanceState){
if(savedInstanceState == null) {
// add/replace your fragment as you would do the first time
} else {
// activity is recreated due to any configuration change . here the fragment will be automatically attached by the fragment manager. You can fetch that fragment by findFragmentByTag(String tag) and then use it.
}
}