0

Мне нужна ваша помощь. Я делаю первые шаги в программировании на Android!Конфликт между навигационным ящиком и правым меню

SOS !!!

Я создал классический навигационный ящик, который вы можете открыть/закрыть, щелкнув значок гамбургера или соскользнув с левой стороны. Я также создал меню правой стороны (например, в приложении для Facebook) и использовал эту библиотеку от GitHub (https://github.com/jfeinstein10/SlidingMenu). В конце я столкнулся с конфликтом между меню навигации ящика и правым меню.

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

Мой код меню правой боковой в MainActivity:

protected void onCreate(Bundle savedInstanceState) { 
super.onCreate(savedInstanceState); 

SlidingMenu menu = new SlidingMenu(this); 
menu.setMode(SlidingMenu.RIGHT); 
menu.setTouchModeAbove(SlidingMenu.TOUCHMODE_FULLSCREEN); 
menu.setFadeDegree(0.35f); 
menu.attachToActivity(this, SlidingMenu.SLIDING_WINDOW); 
menu.setMenu(R.layout.sidemenu); 
menu.setBehindWidthRes(R.dimen.slidingmenu_behind_width); 

String[] items = {"Fisrt fragment","Second fragment"}; 
((ListView) findViewById(R.id.sidemenu)).setAdapter(
     new ArrayAdapter<Object>(
       this, 
       R.layout.sidemenu_item, 
       R.id.text, 
       items 
     ) 
); 

NavigationDrawer код:

public class NavigationDrawerFragment extends Fragment { 
public static final String PREF_FILE_NAME="testpref"; 
public static final String KEY_USER_LEARNED_DRAWER="user_learned_drawer"; 

private ActionBarDrawerToggle mDrawerToggle; 
private ListView mDrawerList; 
private DrawerLayout mDrawerLayout; 

private boolean mUserLearnedDrawer; 
private boolean mFromSavedInstanceState; 

private View containerView; 

public NavigationDrawerFragment() { 
    // Required empty public constructor 
} 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    mUserLearnedDrawer = Boolean.valueOf(readFromPreferences(getActivity(),KEY_USER_LEARNED_DRAWER,"false")); 
    if(savedInstanceState!=null){ 
     mFromSavedInstanceState=true; 
    } 
} 

@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 
    // Inflate the layout for this fragment 
    return inflater.inflate(R.layout.fragment_navigation_drawer, container, false); 
} 

public void setUp(int fragmentId, DrawerLayout drawerLayout, final Toolbar toolbar){ 
    containerView = getActivity().findViewById(fragmentId); 
    mDrawerLayout = drawerLayout; 
    mDrawerToggle = new ActionBarDrawerToggle(getActivity(),drawerLayout,toolbar,R.string.drawer_open, R.string.drawer_close){ 

     @Override 
     public void onDrawerOpened(View drawerView) { 
      super.onDrawerOpened(drawerView); 
      if(!mUserLearnedDrawer){ 
       mUserLearnedDrawer=true; 
       saveToPreferences(getActivity(), KEY_USER_LEARNED_DRAWER, mUserLearnedDrawer+""); 
      } 
      getActivity().invalidateOptionsMenu(); 
     } 

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

     public void onDrawerSlide(View drawerView, float slideOffset) { 
      super.onDrawerSlide(drawerView, slideOffset); 

      if(slideOffset<0.6) { 
       toolbar.setAlpha(1 - slideOffset); 
      } 
     } 
    }; 
    if(!mUserLearnedDrawer&&!mFromSavedInstanceState){ 
     mDrawerLayout.openDrawer(containerView); 
    } 
    mDrawerLayout.setDrawerListener(mDrawerToggle); 

    mDrawerLayout.post(new Runnable() { 
     @Override 
     public void run() { 
      mDrawerToggle.syncState(); 
     } 
    }); 

} 
public static void saveToPreferences(Context context,String preferenceName, String preferenceValue){ 
    SharedPreferences sharedPreferences = context.getSharedPreferences(PREF_FILE_NAME, context.MODE_PRIVATE); 
    SharedPreferences.Editor editor = sharedPreferences.edit(); 
    editor.putString(preferenceName, preferenceValue); 
    editor.apply(); 
} 
public static String readFromPreferences(Context context, String preferenceName, String defaultValue){ 
    SharedPreferences sharedPreferences = context.getSharedPreferences(PREF_FILE_NAME, Context.MODE_APPEND); 
    return sharedPreferences.getString(preferenceName, defaultValue); 
} 

ответ

0

Добавить еще один уровень, как это: http://pastebin.com/xm8UZbvj

+0

Но вот только интерфейс. Мне нужно логическое решение. –

+0

У вас есть идеи? –

+0

Не, потому что я не использую скользящее меню –

0

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

if(mDrawerLayout.isDrawerOpen(mDrawerList)){ 
     mDrawerLayout.closeDrawer(mDrawerList); 
} 
+0

, так как я понимаю, хотят ли пользователи открыть правое меню сначала, им нужно закрыть навигационный ящик. Я создал свой навигационный ящик с помощью ActionBarDrawerToggle. В этом ваш код, что означает mDrawerList ?! У меня ошибка в mDrawerList. Извините за такие глупые вопросы. Я просто начинаю. –

+0

, если вы используете навигационный ящик, тогда вы должны иметь список, который вы используете в своем навигационном ящике. Итак, вы должны передать объект этого списка. – Ravi

+0

на самом деле я хочу использовать элементы GridView в своем навигационном ящике, но в любом случае я добавил private ListView mDrawerList; поэтому теперь в коде нет ошибки, но приложение не хочет открывать в эмуляторе. Я не понимаю, что делать сейчас. Можете ли вы посмотреть на код выше, который я добавил в сообщение. Код NavigationDrawer. Я добавил, что вы сказали. Пожалуйста, мне нужен ваш профессиональный взгляд. Я буду ждать вашего скорого ответа. –