2013-01-19 4 views
3

ViewPagersFragments을 함께 사용하는 것이 처음입니다. 내 응용 프로그램은 시작시 ListView을 가지며 사용자에게 전달 된 ID를 기반으로 세부 정보보기를 표시합니다. 내가 겪고있는 문제는 세부 정보보기가 목록보기와 다른 레이아웃을 가지고 있다는 것입니다. ViewPager은 초기 화면의 레이아웃에 있으므로 ViewPager을 사용하면 레이아웃은 기본적으로 하단의 상태 표시 줄 인 초기 레이아웃을 유지하므로 사용자가 세부 정보보기에 있으면 사라져야합니다.다른 레이아웃을 가진 ViewPager

main.xml에 (시작시 초기 레이아웃을, 상태 표시 줄에)

<?xml version="1.0" encoding="utf-8"?> 

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" 
    android:layout_height="fill_parent" 
    android:layout_width="fill_parent" 
> 
     <!-- Footer --> 
     <TextView 
       android:id="@+id/status" 
       android:layout_width="match_parent" 
       android:layout_height="wrap_content" 
       android:layout_alignParentBottom="true" 
     /> 
     <!-- Footer --> 

    <android.support.v4.view.ViewPager 
     android:id="@+id/viewpager" 
     android:layout_height="match_parent" 
     android:layout_width="match_parent" 
     android:layout_above="@id/status 
    /> 

</RelativeLayout> 

Main.class가

public class Main extends SherlockFragmentActivity 
{ 
    private static int NUMBER_OF_PAGES; 
    private ViewPager mViewPager; 
    private MyFragmentPagerAdapter mMyFragmentPagerAdapter; 
    private static List<Fragment> fragments; 

    @Override 
    public void onCreate(final Bundle icicle) 
    {  
     super.onCreate(icicle); 

     setContentView(R.layout.main); 

     mViewPager = (ViewPager)findViewById(R.id.viewpager); 
     mMyFragmentPagerAdapter = new MyFragmentPagerAdapter(getSupportFragmentManager()); 
     mViewPager.setAdapter(mMyFragmentPagerAdapter); 

     NUMBER_OF_PAGES = 5; 

     fragments = new ArrayList<Fragment>(); 

     fragments.add(new ListingFragment()); //initial screen that just a ListView 

     fragments.add(DetailsFragment.newInstance(1)); 
     fragments.add(DetailsFragment.newInstance(2)); 
     fragments.add(DetailsFragment.newInstance(3)); 
     fragments.add(DetailsFragment.newInstance(4)); 
    } 

    private static class MyFragmentPagerAdapter extends FragmentStatePagerAdapter {    

     public MyFragmentPagerAdapter(FragmentManager fm) { 
      super(fm); 
     } 

     @Override 
     public Fragment getItem(int index) { 

      return fragments.get(index); 
     } 

     @Override 
     public int getCount() { 

      return NUMBER_OF_PAGES; 
     } 
    } 
} 
:

내가 지금까지 무엇을 가지고

Details.xml (상태 표시 줄이없는 세부 정보보기)

<?xml version="1.0" encoding="utf-8"?> 

    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
     xmlns:ads="http://schemas.android.com/apk/lib/com.google.ads" 
     android:orientation="vertical" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
    > 

     <ListView android:id="@android:id/list" 
      android:layout_width="wrap_content" 
      android:layout_height="fill_parent" 
     /> 

    </RelativeLayout> 

DetailsFragment.class

public class DetailsFragment extends SherlockFragmentActivity 
{ 
    private int detailId; 

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

    @Override 
    public void onActivityCreated(final Bundle icicle) 
    {  
     super.onActivityCreated(icicle); 
    } 

    public static DetailsFragment newInstance(int id) { 

     DetailsFragment lf = new DetailsFragment(); 
     Bundle bundle = new Bundle(); 
     bundle.putInt("id", id); 
     lf.setArguments(bundle); 
     return lf; 
    } 

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

     View view = inflater.inflate(R.layout.details, container, false); 

     detailId = getArguments().getInt("id"); 

     return view; 
    } 
} 

답변

0

ViewPager는 intial 화면의 레이아웃에, 그래서 ViewPager를 사용하는 경우 레이아웃은 기본적으로 그냥 상태 인 inital 레이아웃을 유지합니다 바 세부 정보보기에서 사용자가 일 때 사라져야합니다.

그런 다음 메인 레이아웃 파일에 넣어하지 않습니다. 상태가 첫 번째 조각에 묶여 있다면, 특히 DetailsFragment이 해당 상태 인 TextView을 표시 할 필요가없는 경우보기에 속합니다.

그래서 main.xml에에서 상태 TextView를 제거하고 ListingFragment에 사용 된 레이아웃 파일에 추가합니다. ListingFragmentListFragment으로 확장되는 경우 ID가 이고 상태가 TextViewListView을 포함하는 레이아웃 파일을 만들고 onCreateView에이 레이아웃 파일을 부 풀리십시오.

+0

그게 전부입니다. 그것은 나에게 꽤 분명해야했다. :) 감사! –

+0

http://stackoverflow.com/q/18030296/1503130 여기 좀 도와주세요. @Luksprog – Prateek

관련 문제