具有不同布局的Fragment的ViewPager

3

我刚开始使用 ViewPagersFragments。我的应用程序在启动时有一个 ListView,根据传递的id将用户带到详细视图中。我遇到的问题是详细视图具有不同的布局,而不是列表视图。 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;
    }
}
1个回答

阿里云服务器只需要99元/年,新老用户同享,点击查看详情
0
ViewPager位于初始屏幕的布局中,因此使用ViewPager时,布局保留了初始布局,基本上只是底部的状态栏,在用户进入详细视图时应该消失。 那么就不要将它放在主布局文件中。如果状态与第一个片段相关,则应该放在其视图中,特别是如果DetailsFragment不需要显示该状态TextView。 因此,从main.xml中删除状态TextView,并将其添加到ListingFragment中使用的布局文件中。如果ListingFragment扩展了ListFragment,则创建一个包含ListView(id为android:id="@android:id/list")和状态TextView的布局文件,并在onCreateView中填充此布局文件。

就是这样。虽然这对我来说应该很明显 :) 谢谢! - Kris B
请为我提供一些指导,@Luksprog。http://stackoverflow.com/q/18030296/1503130 - Prateek

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,