0

So I have a navigation drawer that handles my fragments. In those fragments I want to implement tabbed navigation. I have searched high and low to find out if this is possible. But I cannot find if it si. From looking at things I don't think it is as the tabbed fragment implementation requires a FragmentActivity and my navigation drawer cannot use FragmentActivitys.

NavDrawers can inflate classes that extend Fragment but not FragmentActivity, which is why I'm thinking this is unachievable. The swipe views on the android developers documentation (http://developer.android.com/training/implementing-navigation/lateral.html) here is why I'm not convinced I can do this. Unless there is a different way to implement navdrawers than that of what I'm doing.

But I also know that Gmail implements something similar. They have a NavDrawer implementation with a feature of tabbed navigation -- you can swipe between emails. Which gives me some hope...

Any direction would be awesome.

Here is my navdrawer implementation, the biggest thing to note is that I'm not using the v4.support library, I'm using the more recent library:

package us.theotts.apps.italiangrammar;

import android.app.Activity;

import android.app.ActionBar;
import android.app.Fragment;
import android.content.res.Configuration;
import android.os.Bundle;
import android.support.v4.app.ActionBarDrawerToggle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.support.v4.widget.DrawerLayout;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import java.util.ArrayList;
import us.theotts.apps.italiangrammar.NavDrawer.NavDrawerItem;
import us.theotts.apps.italiangrammar.NavDrawer.NavDrawerListAdapter;

/**
 * http://www.androidhive.info/2013/11/android-sliding-menu-using-navigation-drawer/
 * http://blog.kitesapp.co/moments-of-delight-navigation-drawer-depth/
 * git test
 */

public class Home extends Activity {
        //implements NavigationDrawerFragment.NavigationDrawerCallbacks {

    /**
     * Fragment managing the behaviors, interactions and presentation of the navigation drawer.
     */
    //private NavigationDrawerFragment mNavigationDrawerFragment;

    /**
     * Used to store the last screen title. For use in {@link #restoreActionBar()}.
     */
    private CharSequence mTitle;
    private DrawerLayout mDrawerLayout;
    private ListView mDrawerList;
    private ActionBarDrawerToggle mDrawerToggle;
    private String TAG = "Home";
    private ArrayList<NavDrawerItem> mNavDrawerItems = new ArrayList<NavDrawerItem>();

    private NavDrawerListAdapter mAdapter;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_home);

        this.mTitle = "Italian Grammar";

        // Initialize our drawer
        this.mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
        this.mDrawerList = (ListView) findViewById(R.id.left_drawer);

        // Set the adapter for our drawer
        this.mDrawerList.setAdapter(
                new ArrayAdapter<String>(
                        this,
                        R.layout.redundant_text_view,
                        getResources().getStringArray(R.array.drawer_titles)
                )
        );
        // Set the click listener
        this.mDrawerList.setOnItemClickListener(new DrawerItemClickListener());

        for(String s : getResources().getStringArray(R.array.drawer_titles)) {
            this.mNavDrawerItems.add(new NavDrawerItem(s));
        }

        // setting the nav drawer list adapter
        this.mAdapter = new NavDrawerListAdapter(getApplicationContext(),
                this.mNavDrawerItems);
        mDrawerList.setAdapter(this.mAdapter);



        this.mDrawerToggle = new ActionBarDrawerToggle(
                this,
                this.mDrawerLayout,
                R.drawable.ic_drawer,
                R.string.navigation_drawer_open,
                R.string.navigation_drawer_close
        ) {
            public void onDrawerClosed(View view) {
                getActionBar().setTitle(mTitle);
            }

            public void onDrawerOpened(View drawerView) {
                getActionBar().setTitle(mTitle);
            }
        };

        this.mDrawerLayout.setDrawerListener(this.mDrawerToggle);

        // enabling action bar app icon and behaving it as toggle button
        getActionBar().setDisplayHomeAsUpEnabled(true);
        getActionBar().setHomeButtonEnabled(true);
    }

    public void onSectionAttached(int number) {
        mTitle = getResources().getStringArray(R.array.drawer_titles)[number-1];
    }

    public void restoreActionBar() {
        ActionBar actionBar = getActionBar();
        actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_STANDARD);
        actionBar.setDisplayShowTitleEnabled(true);
        actionBar.setTitle(mTitle);
    }


    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.home, menu);
        return true;
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        if (this.mDrawerToggle.onOptionsItemSelected(item)) {
            return true;
        }
        // Handle action bar actions click
        switch (item.getItemId()) {
            case R.id.action_settings:
                return true;
            default:
                return super.onOptionsItemSelected(item);
        }
    }

    @Override
    public boolean onPrepareOptionsMenu(Menu menu) {
        // if nav drawer is opened, hide the action items
        boolean drawerOpen = mDrawerLayout.isDrawerOpen(mDrawerList);
        menu.findItem(R.id.action_settings).setVisible(!drawerOpen);
        return super.onPrepareOptionsMenu(menu);
    }

    private class DrawerItemClickListener implements ListView.OnItemClickListener {
        public void onItemClick(AdapterView parent, View view, int position, long id) {
            selectItem(position);
        }
    }

    private void selectItem(int position) {
        // Highlight the selected item, change the title and close the drawer
        this.mDrawerList.setItemChecked(position, true);
        //setTitle(getResources().getStringArray(R.array.drawer_titles)[position]);
        setTitle(getResources().getString(R.string.app_name));
        getFragmentManager().beginTransaction()
                .replace(R.id.content_frame, Fragment.instantiate(
                        this, getResources().getStringArray(R.array.drawer_classes)[position]))
                        .addToBackStack(null).commit();
        this.mDrawerLayout.closeDrawer(this.mDrawerList);
    }

    public void setTitle(CharSequence title) {
        this.mTitle = title;
        getActionBar().setTitle(title);
    }

    @Override
    public void onPostCreate(Bundle savedInstanceState) {
        super.onPostCreate(savedInstanceState);
        this.mDrawerToggle.syncState();
    }

    @Override
    public void onConfigurationChanged(Configuration newConfig) {
        super.onConfigurationChanged(newConfig);
        // Pass any configuration change to the drawer toggls
        mDrawerToggle.onConfigurationChanged(newConfig);
    }
lilott8
  • 1,116
  • 2
  • 17
  • 41
  • possible duplicate of [Adding Tab inside Fragment In Android?](http://stackoverflow.com/questions/20469877/adding-tab-inside-fragment-in-android) – Illegal Argument Sep 03 '14 at 00:45
  • 1
    Sweet, I don't know how this didn't come up. I looked high and low on Google and StackOverflow; this never came up. I'll work on implementing this and get back to your. Thanks. – lilott8 Sep 03 '14 at 01:38
  • No, this isn't. I don't want to use the support.v4 libraries. – lilott8 Sep 13 '14 at 00:57

0 Answers0