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