片段内的片段不能与 ScrollView 一起使用
Posted
技术标签:
【中文标题】片段内的片段不能与 ScrollView 一起使用【英文标题】:Fragment Inside a Fragment Not Working with ScrollView 【发布时间】:2021-12-08 18:22:37 【问题描述】:当我在带有 ScrollView 的片段内使用片段时,它不起作用。
在我的情况下,FirstFragment
很好。里面的片段没有全屏显示,BooksFragment
中的很多内容都消失了
这是我的 FirstFragment
的 XML:
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_
android:layout_
android:background="#DADADA"
tools:context=".FirstFragment">
<ScrollView
android:layout_
android:layout_
android:fillViewport="true"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">
<RelativeLayout
android:layout_
android:layout_>
<com.google.android.material.tabs.TabLayout
android:id="@+id/tabLayout"
android:layout_
android:layout_
android:layout_alignParentStart="true"
android:layout_alignParentTop="true"
android:layout_alignParentEnd="true"
app:tabGravity="fill"
app:tabMode="fixed">
</com.google.android.material.tabs.TabLayout>
<androidx.viewpager2.widget.ViewPager2
android:id="@+id/viewPager"
android:layout_
android:layout_
android:layout_below="@id/tabLayout"
android:layout_alignParentStart="true"
android:layout_alignParentEnd="true" />
</RelativeLayout>
</ScrollView>
这是我的FirstFragment
的 JAVA:
public class FirstFragment extends Fragment
public FirstFragment()
// Required empty public constructor
@Override
public void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
static class ViewPagerAdapter extends FragmentStateAdapter
private final List<Fragment> fragmentList = new ArrayList<>();
private final List<String> fragmentTitleList = new ArrayList<>();
public ViewPagerAdapter(@NonNull FragmentManager fragmentManager, @NonNull Lifecycle lifecycle)
super(fragmentManager, lifecycle);
public void addFragment(Fragment fragment, String title)
fragmentList.add(fragment);
fragmentTitleList.add(title);
@NonNull
@Override
public Fragment createFragment(int position)
return fragmentList.get(position);
@Override
public int getItemCount()
return fragmentList.size();
ViewPagerAdapter adapter;
ViewPager2 viewPager;
TabLayout tabLayout;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState)
// Inflate the layout for this fragment
View view = inflater.inflate(R.layout.fragment_first, container, false);
viewPager = view.findViewById(R.id.viewPager);
tabLayout = view.findViewById(R.id.tabLayout);
initView();
return view;
private void initView()
adapter = new ViewPagerAdapter(getActivity().getSupportFragmentManager(), getActivity().getLifecycle());
adapter.addFragment(new BooksFragment(), "Books");
adapter.addFragment(new ComputerFragment(), "Computers");
viewPager.setAdapter(adapter);
new TabLayoutMediator(tabLayout, viewPager, ((tab, position) ->
tab.setText(adapter.fragmentTitleList.get(position));
)).attach();
这是我的BooksFragment
的 Xml:
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/frameLayout2"
android:layout_
android:layout_
tools:context=".BooksFragment">
<TextView
android:id="@+id/textView"
android:layout_
android:layout_
android:text="lorem ipsum lorem ipsum how sldj as kye akd lorem ipsum lorem ipsum how sldj as kye akd lorem ipsum lorem ipsum how sldj as kye akd lorem ipsum lorem ipsum how sldj as kye akdlorem ipsum lorem ipsum how sldj as kye akd lorem ipsum lorem ipsum how sldj as kye akd lorem ipsum lorem ipsum how sldj as kye akd lorem ipsum lorem ipsum how sldj as kye akd lorem ipsum lorem ipsum how sldj as kye akd lorem ipsum lorem ipsum how sldj as kye akd lorem ipsum lorem ipsum how sldj as kye akd lorem ipsum lorem ipsum how sldj as kye akd lorem ipsum lorem ipsum how sldj as kye akd lorem ipsum lorem ipsum how sldj as kye akd lorem ipsum lorem ipsum how sldj as kye akd lorem ipsum lorem ipsum how sldj as kye akd lorem ipsum lorem ipsum how sldj as kye akd"
android:lineSpacingExtra="20dp"
android:textSize="20sp"
android:layout_margin="16dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
如果我用简单的话来说这个问题,它会是这样的:
我的第一个片段很好,但内部片段的内容没有显示,所以我该如何解决这个问题?任何帮助将不胜感激。如果您对我的帖子有任何疑问或问题,可以告诉我。
示例:
你们已经知道我在 BooksFragment
的 Xml 中有很长的文本:
但在这张图片中,你明白了。
在这张图片中,甚至没有显示一个文本
在此图像中显示文本因为它的文本长度非常小。
警报:
请不要认为灰色背景是他的 (
booksFragment
,ComputerFragment
)。FirstFragment
的背景是灰色的!不是BooksFragment
和ComputerFragment
已编辑:
我正在添加这张不同颜色的图片,这样你就知道什么是大小了。
这里是颜色定义
灰色 -MainActivity
浅蓝色 - FirstFragment
红色 - BookFragment
【问题讨论】:
你可以用viewpager2
match parent
代替wrap content
,希望能解决你的问题。
【参考方案1】:
您的代码运行良好,但您的代码有一些小错误,因此您可以按照此代码进行操作 -
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_
android:layout_
android:background="#BBF8FF"
tools:context=".FirstFragment">
<ScrollView
android:layout_
android:layout_
android:fillViewport="true"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">
<RelativeLayout
android:layout_
android:layout_>
<com.google.android.material.tabs.TabLayout
android:id="@+id/tabLayout"
android:layout_
android:layout_
app:tabGravity="fill"
android:layout_alignParentTop="true"
android:layout_alignParentEnd="true"
android:layout_alignParentStart="true"
app:tabMode="fixed"/>
<androidx.viewpager2.widget.ViewPager2
android:id="@+id/viewPager"
android:layout_
android:layout_
android:layout_below="@id/tabLayout"
android:layout_alignParentStart="true"
android:layout_alignParentEnd="true"
android:layout_alignParentBottom="true"/>
</RelativeLayout>
</ScrollView>
</androidx.constraintlayout.widget.ConstraintLayout>
【讨论】:
以上是关于片段内的片段不能与 ScrollView 一起使用的主要内容,如果未能解决你的问题,请参考以下文章
ViewPager 中片段内的 ScrollView 内的 HorizontalListView
每行带有 EditText 的 Listview , Listview 的 FooterView 内的 Scrollview , adjustResize 和 adjustPan 都工作在一起
android如何使用listview而不是scrollview
我应该使用 ScrollView 还是 RecyclerView 在片段中滚动?