2017-02-17 11 views
0

Я хотел бы мое приложение, чтобы иметь боковое меню с несколькими состояниями с плавными переходами между them.In для того, чтобы сделать это, я установить PagerView экземпляр в качестве навигации drawer.My активности XML:android: DrawerLayout + PagerView = stackOverflow.Why?

<?xml version="1.0" encoding="utf-8"?> 
<android.support.v4.widget.DrawerLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:app="http://schemas.android.com/apk/res-auto" 
xmlns:tools="http://schemas.android.com/tools" 
android:id="@+id/drawer" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
tools:context="net.rhyboo.com.drawer_test.MainActivity"> 

<LinearLayout 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
    android:orientation="vertical"> 
</LinearLayout> 

<net.rhyboo.com.drawer_test.PuzzlePagerView 
    android:layout_gravity="start" 
    android:layout_height="match_parent" 
    android:layout_width="240dp" 
    android:background="@android:color/white" 
    android:id="@+id/pager"> 
</net.rhyboo.com.drawer_test.PuzzlePagerView> 

Это хорошо работает с пустой PagerView .Однако, если я установил адаптер для PagerView я получил стека переполнение exception.Here мой класс активности:

public class MainActivity extends AppCompatActivity { 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    DrawerLayout drawer=(DrawerLayout) findViewById(R.id.drawer); 
    drawer.setScrimColor(getResources().getColor(R.color.gameMenuDim)); 
    PuzzlePagerView pager=(PuzzlePagerView)findViewById(R.id.pager); 
    GameMenuPagerAdapter menuAdapter=new GameMenuPagerAdapter(getSupportFragmentManager()); 
    pager.setAdapter(menuAdapter); 
} 
} 

адаптер:

public class GameMenuPagerAdapter extends FragmentPagerAdapter { 
private GameMenuFragment gameMenu; 
public GameMenuPagerAdapter(FragmentManager fm) { 
    super(fm); 
    gameMenu=new GameMenuFragment(); 
} 
@Override 
public Fragment getItem(int position) { 
    Log.d("pager",position+""); 
    switch (position) { 
     case 0: 
      return gameMenu; 
    } 
    return null; 
} 

@Override 
public int getCount() { 
    return 1; 
} 
} 

ViewPager:

package net.rhyboo.com.drawer_test; 
import android.content.Context; 
import android.support.v4.view.ViewPager; 
import android.util.AttributeSet; 
import android.view.MotionEvent; 
public class PuzzlePagerView extends ViewPager { 
private boolean touchEnabled; 
public PuzzlePagerView(Context context, AttributeSet attrs) { 
    super(context, attrs); 
} 
@Override 
public boolean onTouchEvent(MotionEvent event) { 
    if (this.touchEnabled) { 
     return super.onTouchEvent(event); 
    } 

    return false; 
} 
@Override 
public boolean onInterceptTouchEvent(MotionEvent event) { 
    if (this.touchEnabled) { 
     return super.onInterceptTouchEvent(event); 
    } 

    return false; 
} 

public void setPagingEnabled(boolean enabled) { 
    this.touchEnabled = enabled; 
} 
} 

Фрагмент:

public class GameMenuFragment extends Fragment { 
@Nullable 
@Override 
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
    return inflater.inflate(R.layout.game_menu,container); 
} 
} 

Стек трассировка:

Е/AndroidRuntime: неустранимый: Основной процесс: net.rhyboo.com.drawer_test, ПИД: 14588 java.lang.StackOverflowError: размер стека 8MB
at и roid.view.ViewGroup.jumpDrawablesToCurrentState (ViewGroup.java:6274) на android.view.ViewGroup.jumpDrawablesToCurrentState (ViewGroup.java:6278) на android.view.ViewGroup.jumpDrawablesToCurrentState (ViewGroup.java:6278) на андроид. view.ViewGroup.jumpDrawablesToCurrentState (ViewGroup.java:6278)
....

+1

Можете ли вы предоставить PuzzlePagerView/с GameMenuFragment? – Submersed

+0

Возможная дубликатная ошибка [Stackoverflow error] (http://stackoverflow.com/questions/9124733/stackoverflow-error) – shadygoneinsane

+0

На первый взгляд моя догадка заключается в том, что ваша проблема находится внутри 'GameMenuFragment', как и предложенная @Submersed, можете ли вы опубликовать код для этих классов? – Bobbake4

ответ

0

проблема заключалась в том, как я надуть вид фрагмента вместо

return inflater.inflate(R.layout.game_menu,container); 

должен быть

return inflater.inflate(R.layout.game_menu,container,false); 

Я думал, что это не добавляет мое расположение, чтобы просмотреть иерархию, но это было из-за расположения было пусто => без видимых улик он там

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

  • Нет связанных вопросов^_^