2014-11-19 7 views
2

Ящик навигации каждый раз ложится, открывая новое действие. Я посмотрел на Google для решения, и я узнал, что могу решить его, отложив новое действие с помощью Handler. Я немного экспериментировал, но ничего не получил.Навигационный ящик lag

Некоторые куски кода из MainActivity.java:

public void SelectItem(int possition) { 

     Fragment fragment = null; 
     Bundle args = new Bundle(); 
     switch (possition) { 

      case 2: 
       fragment = new FragmentZero(); 
       break; 
      case 3: 
       fragment = new FragmentOne(); 
       break; 
      case 4: 
       fragment = new FragmentTwo(); 
       break; 
      case 5: 
       fragment = new FragmentThree(); 
       break; 
      case 7: 
       fragment = new FragmentTwo(); 
       break; 
      case 8: 
       fragment = new FragmentZero(); 
       break; 
      case 9: 
       fragment = new FragmentOne(); 
       break; 
      case 10: 
       fragment = new FragmentTwo(); 
       break; 
      case 11: 
       fragment = new FragmentZero(); 
       break; 
      case 12: 
       fragment = new FragmentOne(); 
       break; 
      case 14: 
       fragment = new FragmentZero(); 
       break; 
      case 15: 
       fragment = new FragmentOne(); 
       break; 
      case 16: 
       fragment = new FragmentTwo(); 
       break; 
      default: 
       break; 
     } 

     fragment.setArguments(args); 
     FragmentManager frgManager = getFragmentManager(); 
     frgManager.beginTransaction().replace(R.id.content_frame, fragment) 
       .commit(); 

     mDrawerList.setItemChecked(possition, true); 
     setTitle(dataList.get(possition).getItemName()); 
     mDrawerLayout.closeDrawer(mDrawerList); 
    } 

и

private class DrawerItemClickListener implements ListView.OnItemClickListener { 
     @Override 
     public void onItemClick(AdapterView<?> parent, View view, int position, 
           long id) { 
      if (dataList.get(position).getTitle() == null) { 
       SelectItem(position); 
      } 
     } 
    } 
+0

не ответ на ваш вопрос, но вы можете связать заявления Случае, как так, чтобы сделать код более компактным. См. Статью SwitchDemo2 [здесь] (https://docs.oracle.com/javase/tutorial/java/nutsandbolts/switch.html) –

+0

Я ценю ваш ответ, но, как вы сказали, это не мой вопрос. – Alec

+0

Вот почему я добавил его в качестве комментария;) –

ответ

2

В вашей деятельности создать обработчик и инициализировать его в кнопку Создать метод

private Handler mHandler; 
mHandler = new Handler(); 

затем изменить ваш элемент списка элементов для этого элемента.

private class DrawerItemClickListener implements ListView.OnItemClickListener { 
    @Override 
    public void onItemClick(AdapterView<?> parent, View view, final int position, 
          long id) { 
     if (dataList.get(position).getTitle() == null) { 
      mHandler.postDelayed(new Runnable() { 
       @Override 
       public void run() { 
        SelectItem(position);; 
       } 
      }, 250); 
     } 
     mDrawerList.setItemChecked(possition, true); 
     mDrawerLayout.closeDrawer(mDrawerList); 
    } 
} 

и изменить метод SelectItem к этому

public void SelectItem(int possition) { 

    Fragment fragment = null; 
    Bundle args = new Bundle(); 
    switch (possition) { 

     case 2: 
      fragment = new FragmentZero(); 
      break; 
     case 3: 
      fragment = new FragmentOne(); 
      break; 
     case 4: 
      fragment = new FragmentTwo(); 
      break; 
     case 5: 
      fragment = new FragmentThree(); 
      break; 
     case 7: 
      fragment = new FragmentTwo(); 
      break; 
     case 8: 
      fragment = new FragmentZero(); 
      break; 
     case 9: 
      fragment = new FragmentOne(); 
      break; 
     case 10: 
      fragment = new FragmentTwo(); 
      break; 
     case 11: 
      fragment = new FragmentZero(); 
      break; 
     case 12: 
      fragment = new FragmentOne(); 
      break; 
     case 14: 
      fragment = new FragmentZero(); 
      break; 
     case 15: 
      fragment = new FragmentOne(); 
      break; 
     case 16: 
      fragment = new FragmentTwo(); 
      break; 
     default: 
      break; 
    } 

    fragment.setArguments(args); 
    FragmentManager frgManager = getFragmentManager(); 
    frgManager.beginTransaction().replace(R.id.content_frame, fragment) 
      .commit(); 
    setTitle(dataList.get(possition).getItemName()); 
} 
+1

Я получил его работу, я установил таймер на 300, но мне все еще не нравится, как он работает. Когда я нажимаю кнопку на панели выдвижного ящика, она слайд хорошо и медленно, а затем активность происходит как мгновенная, мгновенная. – Alec

+0

Вы можете анимировать переходы между фрагментами, чтобы помочь разгладить все. Проверьте этот вопрос для получения дополнительной информации. http://stackoverflow.com/questions/4932462/animate-the-transition-between-fragments – cozeJ4

Смежные вопросы