arinte
arinte

Reputation: 3728

Android Back Arrow icon on ActionBar not working

For some reason this activity has the back arrow in the actionbar, but when it is clicked it has no reaction, doesn't even seen to recognize the click. I have other activities that are similar that work fine though. Here is the code with some stuff removed:

public class LanguageActivity extends ActionBarActivity {
        private static final String TAG = "LanguageActivity";

        @InjectView(R.id.listView)
        RecyclerView mRecyclerView;

        @State
        String selectedLang;

        LangViewHolder selectedHolder = null;

        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            Icepick.restoreInstanceState(this, savedInstanceState);
            setContentView(R.layout.recyclerview);
            ButterKnife.inject(this);

            Toolbar toolbar = (Toolbar)findViewById(R.id.toolbar);
            setSupportActionBar(toolbar);
            getSupportActionBar().setDisplayHomeAsUpEnabled(true);

            setTitle(R.string.ad_title_settings_lang);

            selectedLang = PreferencesFacade.getInstance().getCurrentLang();

            mRecyclerView.setLayoutManager(new TrueWrapContentLinearLayoutManager(this));

            List<Pair<String, String>> langList = new LinkedList<>();

            langList.add(Constants.Languages.US);
            langList.add(Constants.Languages.LATIN_AMERICA_SPANISH);
            mRecyclerView.setAdapter(new RecycleViewMappedArrayAdapter(R.layout.view_language_item, new LangViewHolder(mRecyclerView), langList));
        }

        @Override
        protected void onSaveInstanceState(Bundle outState) {
            Icepick.saveInstanceState(this, outState);
            super.onSaveInstanceState(outState);
        }

        @Override
        public boolean onOptionsItemSelected(MenuItem item) {
            switch (item.getItemId()){
                case android.R.id.home:
                    onBackPressed();
                    return true;
            }
            return super.onOptionsItemSelected(item);
        }

        @Override
        public void finish() {
            super.finish();
            PreferencesFacade.getInstance().setCurrentLang(selectedLang);
            Log.v(TAG, "Finishing?");
        }
        public class LangViewHolder extends RecycleViewMappedArrayAdapter.ViewHolder<Pair<String, String>>{
   ...
        }
    }

Manifest snippet:

    <activity android:name=".activities.LanguageActivity"
        android:parentActivityName=".activities.MainActivity">
        <meta-data
            android:name="android.support.PARENT_ACTIVITY"
            android:value=".activities.MainActivity"/>
    </activity>

Upvotes: 0

Views: 815

Answers (2)

edwinj
edwinj

Reputation: 430

This seems to be working for me:

Toolbar tBar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(tBar); // sets the Toolbar as the actionbar 

tBar.setNavigationIcon(getResources().getDrawable(R.drawable.ic_arrow_back_white_24dp));

tBar.setNavigationOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

            onBackPressed(); // calls the System onBackPressed method
        }

    });

Update:

getDrawable(int id) is depreciated so you should change this line of code:

int currentapiVersion = android.os.Build.VERSION.SDK_INT;
if (currentapiVersion >= Build.VERSION_CODES.LOLLIPOP){ 

   tBar.setNavigationIcon(getResources().getDrawable(R.drawable.ic_arrow_back_white_24dp, getApplicationContext().getTheme()));

} else {

   tBar.setNavigationIcon(getResources().getDrawable(R.drawable.ic_arrow_back_white_24dp));

}

Upvotes: 1

user4413698
user4413698

Reputation:

why don't You extend AppCompatActivity(i think actionbaractivity is deprecated...) ?

and

Toolbar toolbar = (Toolbar) findViewById(R.id.the_id);

setSupportActionBar(toolbar);

getSupportActionBar().setDisplayHomeAsUpEnabled(true);

//try this instead

    toolbar.setNavigationOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            onBackPressed();
        }
    });

Upvotes: 1

Related Questions