Best Practice for Android Android Tablet

I am looking for advice on a navigation pattern in android. In the current state of the application I'm working on, I have a navigation box and you can access some elements that basically change dynamically. When I click an item from the navigation box, I show a fragment. Therefore, at any time I want to return to the left menu. Now I need to move the "New Screen" activity from the image in the same template in order to have access to the box. The only way to get to the "New Screen" activity is one of the fragments.

Slice 0 has a list of items. By clicking on it, the "New Screen" opens. How should I approach this in order to have a box in this exercise? I do not want to have too much boiler code. It already has problems with android 4.2.2, I can only imagine how these changes will affect performance. I need to understand what is the best solution, do not have experience with this. All I want is ideas and maybe get some know-how on this template, so I don't cause memory leaks or duplicate code.

Thank you for your time.

enter image description here

+4
source share
1 answer

1st would suggest creating a basic activity that will expand your ActionBarActivity.

2-activity_sliding_drawer main_container DrawerLayout: -

<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/drawer_layout"
android:layout_width="match_parent"
android:layout_height="match_parent">

<FrameLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <FrameLayout
        android:id="@+id/frame_container"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />

    <FrameLayout
        android:layout_gravity="bottom"
        android:id="@+id/bottom_container"
        android:layout_height="wrap_content"
        android:visibility="gone"
        android:layout_width="match_parent"
        android:background="@color/white">
     </FrameLayout>
</FrameLayout>

<fragment
    android:id="@+id/slidingMenuFragment"
    android:name="om.ooredoo.fragments.SlidingMenuFragment"
    android:layout_width="@dimen/slidingmenu__parent_width"
    android:layout_height="fill_parent"
    android:layout_gravity="start" />

3- , 2 , , .. lockDrawerMenu() unlockDrawerMenu().

4 (AbstractActivity ): -

public abstract class AbstractActivity extends ActionBarActivity {
public DrawerLayout mDrawerLayout;
private ActionBarDrawerToggle mDrawerToggle;
private boolean bSupportActionBar = true;
private boolean mSlidingMenuLocked = false;
private BackPressListener mBackPressListener;
private String title;


boolean ismSlidingMenuLocked() {
    return mSlidingMenuLocked;
}


@Override
protected void onCreate(final Bundle savedInstanceState) {
    requestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS);
    requestWindowFeature(Window.FEATURE_PROGRESS);
    super.onCreate(savedInstanceState);

    setContentView(R.layout.activity_sliding_drawer);

    if (bSupportActionBar) {
        mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
        mDrawerLayout.setScrimColor(getResources().getColor(android.R.color.transparent));

        mDrawerToggle = new ActionBarDrawerToggle(this, mDrawerLayout,
                R.drawable.ic_navigation_drawer, //nav menu toggle icon
                R.string.drawer_open, // nav drawer open - description for accessibility
                R.string.drawer_close // nav drawer close - description for accessibility
        ) {

            public void onDrawerClosed(View view) {
                if (getSupportActionBar().getTitle().equals(getString(R.string.app_name)))
                    getSupportActionBar().setTitle(title);
                invalidateOptionsMenu();
            }

            public void onDrawerOpened(View drawerView) {
                title = (String) getSupportActionBar().getTitle();
                getSupportActionBar().setTitle(getString(R.string.app_name));

                // calling onPrepareOptionsMenu() to hide action bar icons
                invalidateOptionsMenu();
            }
        };
        mDrawerLayout.setDrawerListener(mDrawerToggle);
        mDrawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED);
        unlockDrawerMenu();
    }
}

@Override
protected void onStart() {
    super.onStart();
    setSupportProgressBarIndeterminateVisibility(false);

}


@Override
protected void onDestroy() {
    super.onDestroy();
    if (mHandler != null) {
        mHandler.removeCallbacksAndMessages(null);
        mHandler = null;
    }
}


public void addNewFragmentWithBackStack(Fragment fragment) {
    if (fragment != null) {
        FragmentManager fragmentManager = getSupportFragmentManager();
        FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
        fragmentTransaction.replace(R.id.frame_container, fragment, fragment.getClass().getSimpleName())
                .addToBackStack(fragment.getClass().getSimpleName())
                .commit();
    } else {
        Log.e("AbstractActivity", "Error in creating fragment");
    }
}

public void addNewFragmentWithBackStack(Fragment fragment, boolean animation) {
    if (fragment != null) {
        FragmentManager fragmentManager = getSupportFragmentManager();
        FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
        fragmentTransaction.setCustomAnimations(R.anim.slide_up_anim, 0);
        fragmentTransaction.replace(R.id.frame_container, fragment, fragment.getClass().getSimpleName())
                .addToBackStack(fragment.getClass().getSimpleName())
                .commit();
    } else {
        Log.e("AbstractActivity", "Error in creating fragment");
    }
}

public void addNewBottomFragmentWithBackStack(Fragment fragment) {
    if (fragment != null) {
        FragmentManager fragmentManager = getSupportFragmentManager();
        FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
        fragmentTransaction.setCustomAnimations(R.anim.slide_up_anim, 0);
        fragmentTransaction.replace(R.id.bottom_container, fragment)
                .addToBackStack(fragment.getClass().getSimpleName())
                .commit();
    } else {
        Log.e("AbstractActivity", "Error in creating fragment");
    }
}






public void replaceAndClearBackStack(Fragment fragment) {
    //clear backStack
    FragmentManager fm = getSupportFragmentManager();
    fm.popBackStack(null, FragmentManager.POP_BACK_STACK_INCLUSIVE);

    FragmentTransaction transaction = fm.beginTransaction();
    transaction.replace(R.id.frame_container, fragment)
            .addToBackStack(fragment.getClass().getSimpleName());
    transaction.commit();
}

@Override
protected void onPostCreate(Bundle savedInstanceState) {
    super.onPostCreate(savedInstanceState);
    // Sync the toggle state after onRestoreInstanceState has occurred.
    if (bSupportActionBar)
        mDrawerToggle.syncState();
}

@Override
public void onConfigurationChanged(Configuration newConfig) {
    super.onConfigurationChanged(newConfig);
    // Pass any configuration change to the drawer toggles
    if (bSupportActionBar)
        mDrawerToggle.onConfigurationChanged(newConfig);
}


public void lockDrawerMenu() {
    ((DrawerLayout) findViewById(R.id.drawer_layout)).setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED);
    if (bSupportActionBar) {
        getSupportActionBar().setDisplayHomeAsUpEnabled(true);
        mDrawerToggle.setDrawerIndicatorEnabled(false);
    }
    mSlidingMenuLocked = true;


}

public void unlockDrawerMenu() {
    ((DrawerLayout) findViewById(R.id.drawer_layout)).setDrawerLockMode(DrawerLayout.LOCK_MODE_UNLOCKED);
    mSlidingMenuLocked = false;
    mDrawerToggle.setDrawerIndicatorEnabled(true);
    getSupportActionBar().setDisplayHomeAsUpEnabled(true);
    getSupportActionBar().setHomeButtonEnabled(true);

}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    // toggle nav drawer on selecting action bar app icon/title
    if (!ismSlidingMenuLocked() && mDrawerToggle.onOptionsItemSelected(item)) {
        return true;
    }

    // Handle action bar actions click
    switch (item.getItemId()) {
        case android.R.id.home:
            if (ismSlidingMenuLocked()) {
                onBackPressed();
                return true;
            }
            return true;
        default: {
            return super.onOptionsItemSelected(item);
        }
    }
}

public BackPressListener getBackPressListener() {
    return mBackPressListener;
}

public void setBackPressListener(BackPressListener mBackPressListener) {
    this.mBackPressListener = mBackPressListener;
}

@Override
public void onBackPressed() {
    if (getSupportFragmentManager().getFragments().size() > 0) {
        for (Fragment frag : getSupportFragmentManager().getFragments()) {
            if (frag != null && frag.isAdded() && frag instanceof AbstractParentFragment) {
                if (frag.getChildFragmentManager().getBackStackEntryCount() > 0) {
                    frag.getChildFragmentManager().popBackStack();
                    return;
                }
            }

        }
    }

    if (mBackPressListener != null) {
        if (mBackPressListener.onBackPress())
            return;
    } else {
        if (getSupportFragmentManager().getBackStackEntryCount() == 1) {
            this.finish();
            return;
        }

        super.onBackPressed();
    }
}

void supportActionBar(boolean support) {
    bSupportActionBar = support;
}}

5 , , , . , , , , .

, .!!!

+4

Source: https://habr.com/ru/post/1599067/


All Articles