Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/205.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android ViewPager将视图显示在彼此的顶部_Android_Android Fragments_Android Viewpager - Fatal编程技术网

Android ViewPager将视图显示在彼此的顶部

Android ViewPager将视图显示在彼此的顶部,android,android-fragments,android-viewpager,Android,Android Fragments,Android Viewpager,我试图实现一个ViewPager,但目前它在一个屏幕上呈现所有视图,当移动到下一个屏幕时,它是空的,包含所有内容。我有一种感觉,它与片段中的片段有关,但我无法理解 在下面的屏幕截图中,您可以看到: 这是代码的一部分。(ArticlePagerAdapter只是proto的一个实现,用于查找特定的对象类型) 公共抽象类PrototypePageActivity扩展了BaseActivity{ 原型虫; 可视寻呼机; @凌驾 创建时受保护的void(Bundle savedInstanceStat

我试图实现一个ViewPager,但目前它在一个屏幕上呈现所有视图,当移动到下一个屏幕时,它是空的,包含所有内容。我有一种感觉,它与片段中的片段有关,但我无法理解

在下面的屏幕截图中,您可以看到:

这是代码的一部分。(ArticlePagerAdapter只是proto的一个实现,用于查找特定的对象类型)

公共抽象类PrototypePageActivity扩展了BaseActivity{
原型虫;
可视寻呼机;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_proto_pager);
长类别ID=-1;
int-articlePos=0;
Bundle extras=getIntent().getExtras();
如果(附加值!=null){
//if(extras.containsKey(“articleId”))articleId=extras.getInt(“articleId”);
如果(额外的集装箱(“位置”))articlePos=extras.getInt(“位置”);
如果(extras.containsKey(“categoryId”))categoryId=extras.getLong(“categoryId”);
}
mAdapter=newarticlepageradapter(categoryId,getSupportFragmentManager());
mPager=(ViewPager)findviewbyd(R.id.protoPager);
mPager.setAdapter(mAdapter);
mPager.setCurrentItem(articlePos);
}
}
公共抽象类PrototypePagerAdapter扩展了FragmentPagerAdapter{
@凌驾
公共片段getItem(int位置){
试一试{
T对象=getObjectForPosition(位置);
ArticleFragment=新的ArticleFragment();
Bundle args=新Bundle();
args.putLong(“articleId”,object.getId());
articleFragment.setArguments(args);
返回文章片段;
}捕获(例外e){
Log.w(iDomsAndroidApp.TAG,“获取页面的对象实例时出现问题”,e);
返回null;
}
}
公共抽象T getObjectForPosition(int position)抛出异常;
@凌驾
public int getCount(){
返回requestObjectCount();
}
公共抽象int requestObjectCount();
}
公共类ArticleFragment扩展了片段{
@凌驾
创建视图上的公共视图(布局、充气机、视图组容器、,
Bundle savedInstanceState){
视图=充气机。充气(R.layout.fragment\u物品,容器,假);
如果(savedInstanceState==null){
getFragmentManager().beginTransaction()
.add(R.id.content\u片段,新的占位符片段())
.commit();
}
ArticleHeaderFragment ArticleHeaderFragment=新ArticleHeaderFragment();
articleHeaderFragment.setArguments(getArguments());
getFragmentManager().beginTransaction().add(R.id.header_fragment,articleHeaderFragment).commit();
ArticleContentFragment-ArticleContentFragment=ArticleContentFragment.newInstance();
articleContentFragment.setArguments(getArguments());
getFragmentManager().beginTransaction().add(R.id.content_fragment,articleContentFragment.commit();
返回视图;
}    
}
activity_proto_pager.xml:

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

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <android.support.v4.view.ViewPager
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/protoPager" />
</LinearLayout>

fragment_article.xml:

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

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">

    <ImageView
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:id="@+id/imageView"
        android:src="@drawable/background"
        android:scaleType="centerCrop"
        android:contentDescription="@string/background_image"
        android:alpha="0.6" />

    <ScrollView
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:scrollbars="vertical">

        <LinearLayout
            android:orientation="vertical"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content">

            <FrameLayout
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:id="@+id/audio_control_fragment" />

            <FrameLayout
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:id="@+id/header_fragment" />

            <FrameLayout
                android:layout_width="fill_parent"
                android:layout_height="wrap_content"
                android:id="@+id/content_fragment" />
        </LinearLayout>
    </ScrollView>


</RelativeLayout>

fragment\u article\u header.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@color/list_background_overlay"
    android:layout_centerInParent="true"
    tools:context="org.idoms.iDomsAndroid.fragments.ArticleHeaderFragment">

    <org.idoms.iDomsAndroid.views.ResizableImageView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:maxHeight="200dp"
        android:id="@+id/article_imageView"
        android:layout_gravity="center_horizontal"
        android:scaleType="centerCrop" />

</LinearLayout>

您应该替换片段而不是添加

因此,不要使用
。添加(…)
而使用
。替换(…)

更新:

您正在另外两个位置添加片段。使用
articleHeaderFragment
articleContentFragment
执行上述步骤。您可以在else部分中添加代码的第二部分(如果它符合您的逻辑)

更新2

你也应该重新审视你的逻辑。与下面的代码一样,您正在
R.id.content\u fragment
中添加两个片段。Replace可以在这里提供帮助,但您的代码将是多余的

if (savedInstanceState == null) {
     getFragmentManager().beginTransaction()
     .add(R.id.content_fragment, new PlaceholderFragment())
     .commit();
}

ArticleContentFragment articleContentFragment = ArticleContentFragment.newInstance();
articleContentFragment.setArguments(getArguments());
getFragmentManager().beginTransaction().add(R.id.content_fragment, articleContentFragment).commit();

你能把片段贴出来吗。可能是相关的片段,而不是全部。适配器中只有一个
片段
,因此…我添加了ArticleFragment代码并清理了一些不必要的项。与其在savedInstanceState中添加新片段,不如尝试替换
getChildFragmentManager()
以替换
getFragmentManager()
在您的
文章片段中,应该可以工作
if (savedInstanceState == null) {
     getFragmentManager().beginTransaction()
     .add(R.id.content_fragment, new PlaceholderFragment())
     .commit();
}

ArticleContentFragment articleContentFragment = ArticleContentFragment.newInstance();
articleContentFragment.setArguments(getArguments());
getFragmentManager().beginTransaction().add(R.id.content_fragment, articleContentFragment).commit();