не удается скрыть боковое меню при нажатии аппаратной кнопки возврата

#java #android #slidingmenu

#java #Android #slidingmenu

Вопрос:

Это мой код меню

 public class MainActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Menu();
        init();
    }

public void init(){
    LinearLayout mRecomended = (LinearLayout)findViewById(R.id.recomended);
    mRecomended.setOnClickListener(new OnClick());

    LinearLayout mLive = (LinearLayout)findViewById(R.id.live);
    mLive.setOnClickListener(new OnClick());


    LinearLayout mLike = (LinearLayout)findViewById(R.id.like);
    mLike.setOnClickListener(new OnClick());

    LinearLayout mFavorite = (LinearLayout)findViewById(R.id.favorite);
    mFavorite.setOnClickListener(new OnClick());

    LinearLayout mHistory = (LinearLayout)findViewById(R.id.history);
    mHistory.setOnClickListener(new OnClick());

    LinearLayout mFeedback = (LinearLayout)findViewById(R.id.feedback);
    mFeedback.setOnClickListener(new OnClick());

    LinearLayout mSettings = (LinearLayout)findViewById(R.id.settings);
    mSettings.setOnClickListener(new OnClick());
}

private class OnClick implements View.OnClickListener {
    @Override
    public void onClick(View v) {
        Intent intent = new Intent();
        Bundle bundle = new Bundle();
        switch (v.getId()) {
            case R.id.recomended:
                intent.setClass(MainActivity.this,MainActivity.class);
                bundle.putString("theme", "Recomended");
                bundle.putString("From", "MainActivity");
                intent.putExtras(bundle);
                startActivity(intent);
                overridePendingTransition(0, 0);
                Log.e("theme","Recomended");
                break;
            case R.id.live:
                intent.setClass(MainActivity.this,LiveActivity.class);
                bundle.putString("theme", "Live");
                bundle.putString("From", "MainActivity");
                intent.putExtras(bundle);
                startActivity(intent);
                overridePendingTransition(0, 0);
                Log.e("theme","Live");
                break;
            default:
                break;
        }
    }
}
public void Menu(){
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);
    //remove ToolBar Tittle
    getSupportActionBar().setDisplayShowTitleEnabled(false);
    // configure the SlidingMenu
    final SlidingMenu menu = new SlidingMenu(this);
    menu.setMode(SlidingMenu.LEFT);
    menu.setTouchModeAbove(SlidingMenu.TOUCHMODE_FULLSCREEN);
    menu.setShadowWidthRes(R.dimen.shadow_width);
    // setting menu width
    menu.setBehindOffsetRes(R.dimen.slidingmenu_offset);
    menu.setFadeDegree(0.35f);
    menu.attachToActivity(this, SlidingMenu.SLIDING_CONTENT);
    menu.setMenu(R.layout.left_fragment);
    ImageView tool_menu = (ImageView)toolbar.findViewById(R.id.menu);
    tool_menu.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            menu.toggle();
        }
    });
    menu.setDescendantFocusability(ViewGroup.FOCUS_BLOCK_DESCENDANTS);

}

public void Bundle(){
    Bundle getbundle =this.getIntent().getExtras();
    ImageView iRecomended = (ImageView)findViewById(R.id.recomended_line);
    switch(getbundle.getString("theme")){
        case "Recomended":
            iRecomended.setVisibility(View.VISIBLE);
            break;
        case "Live":
            ImageView iLive = (ImageView)findViewById(R.id.live_line);
            iLive.setVisibility(View.VISIBLE);

            iRecomended.setVisibility(View.INVISIBLE);
            break;
        case "Like":
            ImageView iLike = (ImageView)findViewById(R.id.like_line);
            iLike.setVisibility(View.VISIBLE);

            iRecomended.setVisibility(View.INVISIBLE);
            break;
        case "Favorite":
            ImageView iFavorite = (ImageView)findViewById(R.id.favorite_line);
            iFavorite.setVisibility(View.VISIBLE);

            iRecomended.setVisibility(View.INVISIBLE);
            break;
        case "History":
            ImageView iHistory = (ImageView)findViewById(R.id.history_line);
            iHistory.setVisibility(View.VISIBLE);

            iRecomended.setVisibility(View.INVISIBLE);
            break;
        case "Feedback":
            ImageView iFeedback = (ImageView)findViewById(R.id.feedback_line);
            iFeedback.setVisibility(View.VISIBLE);

            iRecomended.setVisibility(View.INVISIBLE);
            break;
        case "Settings":
            ImageView iSettings = (ImageView)findViewById(R.id.settings_line);
            iSettings.setVisibility(View.VISIBLE);

            iRecomended.setVisibility(View.INVISIBLE);
            break;
    }

}}
  

и это моя следующая страница

 public class LiveActivity extends AppCompatActivity {
    String[] name = {"1","1","1","1"};
    String[] nickname = {"MidnightSnack","MidnightSnack","MidnightSnack","MidnightSnack"};
    String[] date = {"March 1,2016","March 1,2016","March 1,2016","March 1,2016"};
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.live_main);
        Menu();
        Bundle();
        RecycleView();
        init();
    }

    public void Bundle(){
        Bundle getbundle =this.getIntent().getExtras();
        ImageView iRecomended = (ImageView)findViewById(R.id.recomended_line);
        switch(getbundle.getString("theme")){
            case "Recomended":
                iRecomended.setVisibility(View.VISIBLE);
                break;
            case "Live":
                ImageView iLive = (ImageView)findViewById(R.id.live_line);
                iLive.setVisibility(View.VISIBLE);

                iRecomended.setVisibility(View.INVISIBLE);
                break;
            case "Like":
                ImageView iLike = (ImageView)findViewById(R.id.like_line);
                iLike.setVisibility(View.VISIBLE);

                iRecomended.setVisibility(View.INVISIBLE);
                break;
            case "Favorite":
                ImageView iFavorite = (ImageView)findViewById(R.id.favorite_line);
                iFavorite.setVisibility(View.VISIBLE);

                iRecomended.setVisibility(View.INVISIBLE);
                break;
            case "History":
                ImageView iHistory = (ImageView)findViewById(R.id.history_line);
                iHistory.setVisibility(View.VISIBLE);

                iRecomended.setVisibility(View.INVISIBLE);
                break;
            case "Feedback":
                ImageView iFeedback = (ImageView)findViewById(R.id.feedback_line);
                iFeedback.setVisibility(View.VISIBLE);

                iRecomended.setVisibility(View.INVISIBLE);
                break;
            case "Settings":
                ImageView iSettings = (ImageView)findViewById(R.id.settings_line);
                iSettings.setVisibility(View.VISIBLE);

                iRecomended.setVisibility(View.INVISIBLE);
                break;
        }

    }

    public void Menu(){
        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);
        //remove ToolBar Tittle
        getSupportActionBar().setDisplayShowTitleEnabled(false);
        final SlidingMenu menu = new SlidingMenu(this);
        menu.setMode(SlidingMenu.LEFT);
        menu.setTouchModeAbove(SlidingMenu.TOUCHMODE_FULLSCREEN);
        menu.setShadowWidthRes(R.dimen.shadow_width);
        // setting menu width
        menu.setBehindOffsetRes(R.dimen.slidingmenu_offset);
        menu.setFadeDegree(0.35f);
        menu.attachToActivity(this, SlidingMenu.SLIDING_CONTENT);
        menu.setMenu(R.layout.left_fragment);
        ImageView tool_menu = (ImageView)toolbar.findViewById(R.id.menu);
        tool_menu.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
                menu.showMenu();
            }
        });
    }

    public void RecycleView(){
        RecyclerView recyclerView = (RecyclerView) findViewById(R.id.recyclerView);
        ArrayList<PostOfLiveActivity> data = new ArrayList<>();
        for(int i = 0; i < name.length; i  ) {
            data.add(new PostOfLiveActivity(name[i], null, nickname[i],date[i]));
        }
        AdapterOfLiveActivity adapter = new AdapterOfLiveActivity(this, data);
        recyclerView.setLayoutManager(new LinearLayoutManager(this));
        recyclerView.setAdapter(adapter);

    }

    public void init(){
        LinearLayout mRecomended = (LinearLayout)findViewById(R.id.recomended);
        mRecomended.setOnClickListener(new OnClick());

        LinearLayout mLive = (LinearLayout)findViewById(R.id.live);
        mLive.setOnClickListener(new OnClick());

        LinearLayout mLike = (LinearLayout)findViewById(R.id.like);
        mLike.setOnClickListener(new OnClick());

        LinearLayout mFavorite = (LinearLayout)findViewById(R.id.favorite);
        mFavorite.setOnClickListener(new OnClick());

        LinearLayout mHistory = (LinearLayout)findViewById(R.id.history);
        mHistory.setOnClickListener(new OnClick());

        LinearLayout mFeedback = (LinearLayout)findViewById(R.id.feedback);
        mFeedback.setOnClickListener(new OnClick());

        LinearLayout mSettings = (LinearLayout)findViewById(R.id.settings);
        mSettings.setOnClickListener(new OnClick());
    }

    private class OnClick implements View.OnClickListener {
        @Override
        public void onClick(View v) {
            Intent intent = new Intent();
            Bundle bundle = new Bundle();
            switch (v.getId()) {
                case R.id.recomended:
                    intent.setClass(LiveActivity.this,MainActivity.class);
                    bundle.putString("theme", "Recomended");
                    intent.putExtras(bundle);
                    startActivity(intent);
                    overridePendingTransition(0, 0);
                    Log.e("theme","Recomended");
                    break;
                case R.id.live:
                    intent.setClass(LiveActivity.this,LiveActivity.class);
                    bundle.putString("theme", "Live");
                    intent.putExtras(bundle);
                    startActivity(intent);
                    overridePendingTransition(0, 0);
                    Log.e("theme","Live");
                    break;
                default:
                    break;
            }
        }
    }
}
  

когда я нажимаю кнопку аппаратного возврата в LiveActivity, она возвращается к MainActivity, но также открывается мое слайд-меню, как я могу скрыть их при нажатии кнопки аппаратного возврата??

Ответ №1:

Если вы случайно используете https://github.com/jfeinstein10/SlidingMenu я рекомендую вам вместо этого переключиться на NavigationDrawer, потому что это SlidingMenu больше не поддерживается и содержит ошибки, которые еще не устранены. Если вы настаиваете на использовании этой библиотеки, я рекомендую вам закрыть меню, прежде чем перейти к LiveActivity, вызвав

 if (menu.isMenuShowing()) {
    menu.showContent();
}
  

Комментарии:

1. спасибо за ваш ответ, но я все еще получаю ошибку из-за этого, я не знаю, почему это не работает, это слишком плохо

2. Убедитесь, что создание экземпляра скользящего меню выполнено правильно. Поместите private SlidingMenu menu; вне метода в качестве глобальной переменной, затем создайте ее правильно как menu = new SlidingMenu(this); метод inside Menu(). Убедитесь, что вы удалили final ключевое слово

3. Для меня это работает!! большое вам спасибо, я просто забыл удалить «Окончательный»!!!!!

Ответ №2:

Вы можете решить эту проблему путем:

  • Перейти SlidingMenu menu к глобальным переменным
  • Переопределите метод onBackPressed в действии, которое вы хотите, нажмите жесткую клавишу возврата, чтобы закрыть слайд-меню, как показано ниже:
    @Override
    public void onBackPressed() {
    super.onBackPressed();
    if (menu.isMenuShowing()) {
    menu.toggle();
    }
    }

Комментарии:

1. спасибо за ваш ответ, но когда я перемещаю меню SlidingMenu в глобальные переменные, это выдает ошибку, которая показывает java.lang.RuntimeException: невозможно создать activity ComponentInfo{bravoideas.ishowlife/bravoideas.ishowlife. LiveActivity}: java.lang. Исключение NullPointerException: попытка вызвать виртуальный метод ‘android.content.res.Resources android.content. Context.getResources()’ для нулевого объекта

2. Вы инициализируете метод menu = new SlidingMenu(this); on OnCreate ? запомните, удалите ключевое слово final