简体   繁体   中英

ActionBar is not showing Title in Android

I want to implement Left & Right Side Slider Menu so I have set Right Side Slider in NavigationDrawerSlider which already have Left Side Slider by Default.

I am using ActionBarSherLock for this to support Application from Api 8. Slider is working fine but issue is that ActionBar is not showing Title.

Please help me to solve this issue. One more thing, When I Click on ImageView, It also fires ActionBarDrawerToggle . So, how to prevent this also ?

My Code:

public class MainActivity extends SherlockFragmentActivity {

    private DrawerLayout mDrawerLayout;

    private ListView mDrawerList_Left;
    private ListView mDrawerList_Right;

    private ActionBarDrawerToggle mDrawerToggle;
    private ActionBar actionBar_Right;

    private ArrayList<NavDrawerItem> navDrawerItems_Left;
    private ArrayList<NavDrawerItem> navDrawerItems_Right;

    private CharSequence mDrawerTitle_Left;
    private CharSequence mTitle_Left;
    private CharSequence mDrawerTitle_Right;
    private CharSequence mTitle_Right;

    private String[] mFragmentTitles_Left;
    private String[] mFragmentTitles_Right;

    private TypedArray navMenuIcons_Left;
    private TypedArray navMenuIcons_Right;

    private NavDrawerListAdapter adapter_Left;
    private NavDrawerListAdapter adapter_Right;

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

        mTitle_Left = mDrawerTitle_Left = getTitle();

        mFragmentTitles_Left = getResources().getStringArray(
                R.array.nav_drawer_items);
        mFragmentTitles_Right = getResources().getStringArray(
                R.array.nav_drawer_items_right);

        navMenuIcons_Left = getResources().obtainTypedArray(
                R.array.nav_drawer_icons);
        navMenuIcons_Right = getResources().obtainTypedArray(
                R.array.nav_drawer_icons_right);

        mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
        mDrawerList_Left = (ListView) findViewById(R.id.list_left_slidermenu);
        mDrawerList_Right = (ListView) findViewById(R.id.list_right_slidermenu);

        actionBar_Right = getSupportActionBar();
        actionBar_Right.setCustomView(R.layout.right_menu);
        actionBar_Right.setDisplayShowTitleEnabled(true);
        actionBar_Right.setDisplayShowCustomEnabled(true);

        navDrawerItems_Left = new ArrayList<NavDrawerItem>();
        navDrawerItems_Right = new ArrayList<NavDrawerItem>();

        // Left Side Menus...
        // Home...
        navDrawerItems_Left.add(new NavDrawerItem(mFragmentTitles_Left[0],
                navMenuIcons_Left.getResourceId(0, -1)));

        navMenuIcons_Left.recycle();

        // Right Side Menus...
        // Edit Profile...
        navDrawerItems_Right.add(new NavDrawerItem(mFragmentTitles_Right[0],
                navMenuIcons_Right.getResourceId(0, -1)));

        // Change Password...
        navDrawerItems_Right.add(new NavDrawerItem(mFragmentTitles_Right[1],
                navMenuIcons_Right.getResourceId(1, -1)));

        navMenuIcons_Right.recycle();

        mDrawerList_Left
                .setOnItemClickListener(new DrawerItemClickListener_Left());
        mDrawerList_Right
                .setOnItemClickListener(new DrawerItemClickListener_Right());

        getSupportActionBar().setDisplayHomeAsUpEnabled(true);
        getSupportActionBar().setHomeButtonEnabled(true);

        adapter_Left = new NavDrawerListAdapter(getApplicationContext(),
                navDrawerItems_Left);
        mDrawerList_Left.setAdapter(adapter_Left);

        mDrawerToggle = new ActionBarDrawerToggle(this, mDrawerLayout,
                R.drawable.ic_drawer, R.string.app_name, R.string.app_name);

        adapter_Right = new NavDrawerListAdapter(getApplicationContext(),
                navDrawerItems_Right);
        mDrawerList_Right.setAdapter(adapter_Right);

        ImageView imgRight = (ImageView) findViewById(R.id.imgRightMenu);
        imgRight.setOnClickListener(new View.OnClickListener() {

            @Override
            public void onClick(View arg0) {
                // TODO Auto-generated method stub

                if (mDrawerLayout.isDrawerOpen(mDrawerList_Right)) {
                    mDrawerLayout.closeDrawer(mDrawerList_Right);

                    setTitle(mTitle_Right);
                } else {
                    mDrawerLayout.openDrawer(mDrawerList_Right);
                    mDrawerLayout.closeDrawer(mDrawerList_Left);

                    setTitle(mDrawerTitle_Right);
                }
            }
        });

        mDrawerLayout.setDrawerListener(mDrawerToggle);
        if (savedInstanceState == null) {
            selectItem_Left(0);
        }
    }

    @Override
    public boolean onPrepareOptionsMenu(Menu menu) {
        // boolean drawerOpen = mDrawerLayout.isDrawerOpen(mDrawerList);
        return super.onPrepareOptionsMenu(menu);
    }

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

    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
        case android.R.id.home:
            if (mDrawerLayout.isDrawerOpen(mDrawerList_Left)) {
                mDrawerLayout.closeDrawer(mDrawerList_Left);

                setTitle(mTitle_Left);
            } else {
                mDrawerLayout.openDrawer(mDrawerList_Left);
                mDrawerLayout.closeDrawer(mDrawerList_Right);

                setTitle(mDrawerTitle_Left);
            }

            return true;
        default:
            return super.onOptionsItemSelected(item);
        }
    }

    private class DrawerItemClickListener_Left implements
            ListView.OnItemClickListener {
        @Override
        public void onItemClick(AdapterView<?> parent, View v, int position,
                long id) {
            selectItem_Left(position);
        }
    }

    private void selectItem_Left(int position) {
        Fragment newFragment = new Home();
        FragmentManager fm = getSupportFragmentManager();
        switch (position) {
        case 0:
            newFragment = new Home();
            break;
        }

        fm.beginTransaction().replace(R.id.frame_container, newFragment)
                .commit();

        mDrawerList_Left.setItemChecked(position, true);
        setTitle(mFragmentTitles_Left[position]);
        mDrawerLayout.closeDrawer(mDrawerList_Left);
    }

    private class DrawerItemClickListener_Right implements
            ListView.OnItemClickListener {
        @Override
        public void onItemClick(AdapterView<?> parent, View v, int position,
                long id) {
            selectItem_Right(position);
        }
    }

    private void selectItem_Right(int position) {
        Fragment newFragment = new EditProfile();
        FragmentManager fm = getSupportFragmentManager();
        switch (position) {
        case 0:
            newFragment = new EditProfile();
            break;
        case 1:
            newFragment = new ChangePassword();
            break;
        }

        fm.beginTransaction().replace(R.id.frame_container, newFragment)
                .commit();

        mDrawerList_Right.setItemChecked(position, true);
        setTitle(mFragmentTitles_Right[position]);
        mDrawerLayout.closeDrawer(mDrawerList_Right);
    }

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

    @Override
    public void onConfigurationChanged(Configuration newConfig) {
        super.onConfigurationChanged(newConfig);
        mDrawerToggle.onConfigurationChanged(newConfig);
    }
}

I have figured out that It is not showing title because of

actionBar_Right = getSupportActionBar();
actionBar_Right.setCustomView(R.layout.right_menu);
actionBar_Right.setDisplayShowTitleEnabled(true);
actionBar_Right.setDisplayShowCustomEnabled(true);



What to do for this ?

For showing the title in the ActionBar setTitle must be overridden:

@Override
public void setTitle(CharSequence title)
{
    this.title = title;
    getSupportActionBar().setTitle(title);
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM