Как добавить кнопку со стрелкой назад во фрагмент и прослушиватель кликов для нее - PullRequest
0 голосов
/ 04 декабря 2018

У меня есть активность и фрагмент.В этом упражнении у меня есть панель инструментов и ящик.Поэтому я хочу добавить стрелку назад во фрагмент и добавить слушатель щелчка для этого.Все хорошо, во фрагменте у меня есть кнопка со стрелкой назад, но когда я нажимаю на нее, открывается ящик.Так как мне это исправить?Может я что-то не так сделал в своем коде?

Вот мой код активности.MainActivity.class

private Toolbar toolbar;
private DrawerLayout drawer;
private ActionBarDrawerToggle toggle;
private View view;
private Button button;

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

    view = findViewById(R.id.mainView);
    button = findViewById(R.id.about_us);

    initToolbar();
    drawerInit();
}


@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
        case android.R.id.home:
            this.finish();
            return true;
        default:
            return false;
    }
}

@Override
public void replaceFragment(BaseFragment fragment, Boolean isAddToBackStack) {
    String backStateName = fragment.getFragmentName();
    FragmentManager manager = getSupportFragmentManager();

    FragmentTransaction transaction = manager.beginTransaction();
    transaction.replace(R.id.main_fragment_container, fragment, backStateName);
    if (isAddToBackStack) {
        transaction.addToBackStack(backStateName);
    }

    transaction.commit();
}


public void initToolbar() {
    toolbar = (Toolbar) findViewById(R.id.toolbar_actionbar);
    setSupportActionBar(toolbar);
}

public void drawerInit() {
    drawer = (DrawerLayout) findViewById(R.id.drawer);

    toggle = new ActionBarDrawerToggle(
            this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close) {

        @Override
        public void onDrawerSlide(View drawerView, float slideOffset) {
            super.onDrawerSlide(drawerView, slideOffset);
            float moveFactor = (drawerView.getWidth() * slideOffset);
            view.setTranslationX(moveFactor);
        }

        @Override
        public void onDrawerClosed(View drawerView) {
            super.onDrawerClosed(drawerView);
        }
    };

    drawer.addDrawerListener(toggle);
    toggle.setDrawerIndicatorEnabled(true);
    toggle.syncState();
}

//fragments back press part
@Override
public void onBackPressed() {
    super.onBackPressed();
}


@Override
protected void onDestroy() {
    super.onDestroy();
}

Итак, я инициализирую панель инструментов и ящик.И здесь я инициализирую свой фрагмент

public class AboutUs extends BaseFragment {

View mainView;

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    mainView = inflater.inflate(R.layout.about_us, container, false);

    ((AppCompatActivity)getActivity()).getSupportActionBar().setDisplayShowHomeEnabled(true);
    ((AppCompatActivity)getActivity()).getSupportActionBar().setDisplayHomeAsUpEnabled(true);
    ((AppCompatActivity)getActivity()).getSupportActionBar().setTitle("About us");

    return mainView;
}
}

Поэтому я попытался переопределить onOptionsItemSelected в этом фрагменте, но это не помогло.Значок изменится на стрелку назад во фрагменте, но при нажатии открывает ящик.Есть идеи как это исправить?Я попробовал почти все ответы на другие вопросы, подобные этому, но они не помогли.

1 Ответ

0 голосов
/ 04 декабря 2018

В вашей активности измените this.finish() внутри прослушивателя меню параметров для this.onBackPressed(), который вызовет значение по умолчанию getFragmentManager().popStackBack(), удалив ваш фрагмент для более старого.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...