2014-04-14 4 views
0

내 앱에서 왼쪽에는 가로 레이아웃의 목록이 있고 오른쪽에는 뷰 파인더가 포함 된 조각 (다른 조각을 스 와이프하기)이있는 액티비티가 있어야합니다. 내 문제는 중첩 된 조각이있을 것입니다. 왜냐하면 뷰 페이지가 포함 된 조각에 스 와이프 할 수있는 여러 조각이 포함되어 있기 때문입니다. 내 목록을 내 viewpager 옆에 표시 할 수있는 솔루션이 있습니까? 목록이 포함 된 단편을 포함 활동의조각에있는 뷰 페이지

레이아웃 및 viewpager와 조각 : 여기

내 레이아웃 파일입니다.

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:baselineAligned="false" > 

    <fragment 
     android:id="@+id/cafelijst" 
     android:layout_width="0dp" 
     android:layout_height="match_parent" 
     android:layout_weight="1" 
     class="com.example.projectapp.cafezoeken.CafeLijstFragment" /> 

    <FrameLayout 
     android:id="@+id/details" 
     android:layout_width="0dp" 
     android:layout_height="match_parent" 
     android:layout_weight="1" /> 

</LinearLayout> 

viewpager로 단편의 레이아웃.

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="vertical" > 

    <android.support.v4.view.ViewPager 
     xmlns:android="http://schemas.android.com/apk/res/android" 
     android:id="@+id/pager" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" /> 

</LinearLayout> 

뷰 페이지가 포함 된 조각. 나는이 당신을 위해 작동 희망

private class ScreenSlidePagerAdapter extends FragmentStatePagerAdapter { 
    private ArrayList<Fragment> mMyFragments = new ArrayList<Fragment>(); 

    public ScreenSlidePagerAdapter(FragmentManager fm) { 
     super(fm); 
     //... add Fragments to mMyFragments 
    } 

    @Override 
    public Fragment getItem(int position) { 
     return mMyFragments.get(position); 
    } 

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

:

import com.example.projectapp.R; 
import android.app.ActionBar; 
import android.app.ActionBar.Tab; 
import android.app.FragmentTransaction; 
import android.os.Bundle; 
import android.os.Handler; 
import android.support.v4.app.Fragment; 
import android.support.v4.view.ViewPager; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 


/** 
* A placeholder fragment containing a simple view. 
*/ 
public class CafeSwipeFragment extends Fragment implements ActionBar.TabListener { 

    CafeDetailsPagerAdapter mPagerAdapter; 
    ViewPager mViewPager; 
    View mView; 
    public static int index; 
    ActionBar actionBar; 


    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 

     mView = inflater.inflate(R.layout.fragment_cafe_details, container, false); 

     mViewPager = (ViewPager) mView.findViewById(R.id.pager); 
     mPagerAdapter = new CafeDetailsPagerAdapter(getFragmentManager()); 


     // Set up the action bar. 
     actionBar = getActivity().getActionBar(); 

     for (int i = 0; i < mPagerAdapter.getCount(); i++) { 
      // Create a tab with text corresponding to the page title defined by the adapter. 
      // Also specify this Activity object, which implements the TabListener interface, as the 
      // listener for when this tab is selected. 
      actionBar.addTab(actionBar.newTab().setText(mPagerAdapter.getPageTitle(i)).setTabListener(this)); 
     } 

     mViewPager.setOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() { 
      @Override 
      public void onPageSelected(int position) { 
       // When swiping between different app sections, select the corresponding tab. 
       // We can also use ActionBar.Tab#select() to do this if we have a reference to the 
       // Tab. 
       actionBar.setSelectedNavigationItem(position); 
      } 
     }); 



     mViewPager.setOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() { 
      @Override 
      public void onPageSelected(int position) { 
       // When swiping between different app sections, select the corresponding tab. 
       // We can also use ActionBar.Tab#select() to do this if we have a reference to the 
       // Tab. 
       actionBar.setSelectedNavigationItem(position); 
      } 
     }); 


     Handler handler = new Handler(); 
     handler.post(new Runnable() { 
      @Override 
      public void run() { 
       mViewPager.setAdapter(mPagerAdapter);  
      } 
     }); 

     actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS); 

     return mView; 
    } 

    @Override 
    public void onActivityCreated(Bundle savedInstanceState) { 
     super.onActivityCreated(savedInstanceState); 

    } 

    public static CafeSwipeFragment newInstance(int index) { 
     CafeSwipeFragment f = new CafeSwipeFragment(); 

     CafeSwipeFragment.index = index; 
     return f; 
    } 

    public int getShownIndex() { 
     return index; 
    } 

    @Override 
    public void onTabSelected(Tab tab, FragmentTransaction ft) { 
     mViewPager.setCurrentItem(tab.getPosition()); 

    } 

    @Override 
    public void onTabUnselected(Tab tab, FragmentTransaction ft) { 
     // TODO Auto-generated method stub 

    } 

    @Override 
    public void onTabReselected(Tab tab, FragmentTransaction ft) { 
     // TODO Auto-generated method stub 

    } 
} 

04-15 00:06:09.325: E/AndroidRuntime(15335): FATAL EXCEPTION: main 
04-15 00:06:09.325: E/AndroidRuntime(15335): java.lang.IllegalStateException: Can't change container ID of fragment InfoFragment{41a85050 #0 id=0x7f05005a android:switcher:2131034202:0}: was 2131034202 now 2131034203 
04-15 00:06:09.325: E/AndroidRuntime(15335): at android.support.v4.app.BackStackRecord.doAddOp(BackStackRecord.java:407) 
04-15 00:06:09.325: E/AndroidRuntime(15335): at android.support.v4.app.BackStackRecord.replace(BackStackRecord.java:429) 
04-15 00:06:09.325: E/AndroidRuntime(15335): at android.support.v4.app.BackStackRecord.replace(BackStackRecord.java:421) 
04-15 00:06:09.325: E/AndroidRuntime(15335): at com.example.projectapp.cafezoeken.infotab.InfoFragment.onCreateView(InfoFragment.java:22) 
04-15 00:06:09.325: E/AndroidRuntime(15335): at android.support.v4.app.Fragment.performCreateView(Fragment.java:1500) 
04-15 00:06:09.325: E/AndroidRuntime(15335): at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:927) 
04-15 00:06:09.325: E/AndroidRuntime(15335): at android.support.v4.app.FragmentManagerImpl.moveToState(FragmentManager.java:1104) 
04-15 00:06:09.325: E/AndroidRuntime(15335): at android.support.v4.app.BackStackRecord.run(BackStackRecord.java:682) 
04-15 00:06:09.325: E/AndroidRuntime(15335): at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1467) 
04-15 00:06:09.325: E/AndroidRuntime(15335): at android.support.v4.app.FragmentManagerImpl.executePendingTransactions(FragmentManager.java:472) 
04-15 00:06:09.325: E/AndroidRuntime(15335): at android.support.v4.app.FragmentPagerAdapter.finishUpdate(FragmentPagerAdapter.java:141) 
04-15 00:06:09.325: E/AndroidRuntime(15335): at android.support.v4.view.ViewPager.populate(ViewPager.java:1068) 
04-15 00:06:09.325: E/AndroidRuntime(15335): at android.support.v4.view.ViewPager.populate(ViewPager.java:914) 
04-15 00:06:09.325: E/AndroidRuntime(15335): at android.support.v4.view.ViewPager.setAdapter(ViewPager.java:442) 
04-15 00:06:09.325: E/AndroidRuntime(15335): at com.example.projectapp.cafezoeken.CafeSwipeFragment$3.run(CafeSwipeFragment.java:75) 
04-15 00:06:09.325: E/AndroidRuntime(15335): at android.os.Handler.handleCallback(Handler.java:615) 
04-15 00:06:09.325: E/AndroidRuntime(15335): at android.os.Handler.dispatchMessage(Handler.java:92) 
04-15 00:06:09.325: E/AndroidRuntime(15335): at android.os.Looper.loop(Looper.java:155) 
04-15 00:06:09.325: E/AndroidRuntime(15335): at android.app.ActivityThread.main(ActivityThread.java:5520) 
04-15 00:06:09.325: E/AndroidRuntime(15335): at java.lang.reflect.Method.invokeNative(Native Method) 
04-15 00:06:09.325: E/AndroidRuntime(15335): at java.lang.reflect.Method.invoke(Method.java:511) 
04-15 00:06:09.325: E/AndroidRuntime(15335): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1029) 
04-15 00:06:09.325: E/AndroidRuntime(15335): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:796) 
04-15 00:06:09.325: E/AndroidRuntime(15335): at dalvik.system.NativeStart.main(Native Method) 

답변

0

변화는

<?xml version="1.0" encoding="UTF-8"?> 
<android.support.v4.view.ViewPager 
     xmlns:android="http://schemas.android.com/apk/res/android" 
     android:id="@+id/pager" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent"> 
</android.support.v4.widget.ViewPager> 

두 번째 레이아웃을 onCreateView

mPager = (ViewPager) findViewById(R.id.pager); 
mPagerAdapter = new ScreenSlidePagerAdapter(getSupportChildFragmentManager()); 
mPager.setAdapter(mPagerAdapter); 

에서 사용자 정의 PageAdapter를이 필요합니다.

확인 : Screen slide with ViewPager

+0

나는 끝 태그를 가정 해 "" ""해야? – Stein

+0

오 예. 그것을 바꿨습니다. – speedy1034

+0

또 다른 질문이 있습니다. 클래스/메소드를 사용하여 레이아웃을 확장해야합니까? – Stein