#android #activity #android_fragment
Есть активити и фрагмент в фрагменте стоит DisplayHomeAsUpEnabled. При переходе с активити в фрагмент кнопка назад появляется все хорошо, но при нажатии и перехода назад в активити стрелочка остается отображаеться? Как убрать? Пробывал не помогло: getSupportActionBar().setHomeButtonEnabled(false); getSupportActionBar().setDisplayHomeAsUpEnabled(false); getSupportActionBar().setHomeAsUpIndicator(null); Код кнопки в фрагменте DisplayHomeAsUpEnabled: @Override public void onResume() { super.onResume(); ((ActionBarActivity)getActivity()).getSupportActionBar().setDisplayHomeAsUpEnabled(true); } Код активити: public class MainActivity extends ActionBarActivity implements ExpandableListView.OnChildClickListener, View.OnClickListener { private static FragmentManager mManager; Button button1; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); setSupportActionBar(toolbar); button1 = (Button) findViewById(R.id.button1); mManager = getSupportFragmentManager(); getSupportActionBar().setIcon(R.drawable.ic_launcher); getSupportActionBar().setDisplayHomeAsUpEnabled(false); /* FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab); fab.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG) .setAction("Action", null).show(); } });*/ // button1.setOnClickListener(this); button1.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Fragment fragment = null; mManager.findFragmentById(R.id.fragmentContainer); if (fragment == null) { fragment = new sovety_Fragment(); mManager.beginTransaction() .add(R.id.fragmentContainer, fragment) .replace(R.id.fragmentContainer, fragment) .addToBackStack(null) .commit(); } } }); } public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.menu_main, 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. int id = item.getItemId(); //noinspection SimplifiableIfStatement if (id == R.id.action_settings) { return true; } if (id == android.R.id.home) { onBackPressed(); return true; } return super.onOptionsItemSelected(item); } @Override public boolean onChildClick(ExpandableListView parent, View v, int groupPosition, int childPosition, long id) { return false; } @Override public void onClick(View v) { } }
Ответы
Ответ 1
Вы вызываете код, убирающий стрелку до того, как её показываете. Т.к. вы убираете фрагмент нажатием кнопки "назад" именно в слушателе её нажатия надо убирать стрелку. Засим попробуйте добавить обработчик нажатия кнопки назад в активити и именно в нём убрать стрелку: @Override onBackPressed() { getSupportActionBar().setDisplayHomeAsUpEnabled(false); super.onBackPressed(); }Ответ 2
Вы вызываете getSupportActionBar().setDisplayHomeAsUpEnabled(false); (прячете кнопку назад) при создании активити, затем добавляете на активити фрагмент, в котором показываете эту кнопку, но вы не прячете её снова при удалении фрагмента. Так с чего бы она должна пропасть. Добавьте вот такой метод в активити: public void onBackPressed() { if (getSupportFragmentManager().getBackStackEntryCount() > 0) { getSupportActionBar().setDisplayHomeAsUpEnabled(getSupportFragmentManager().getBackStackEntryCount() > 1); getSupportFragmentManager().popBackStack(); } else { super.onBackPressed(); } }
Комментариев нет:
Отправить комментарий