我使用ViewPager
在Fragments
之间滑动,但我可以使用ViewPager
在Views
简单XML布局之间滑动吗?
这是我的页面Adapter
的ViewPager,用于在片段之间滑动:
import java.util.List;
import com.app.name.fragments.TipsFragment;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;
import android.support.v4.app.FragmentTransaction;
import android.view.ViewGroup;
public class PageAdapter extends FragmentPagerAdapter {
/**
*
*/
List<Fragment> fragments;
public PageAdapter(FragmentManager fm,List<Fragment> frags) {
super(fm);
fragments = frags;
}
@Override
public Fragment getItem(int arg0) {
// TODO Auto-generated method stub
return TipsFragment.newInstance(0, 0);
}
@Override
public int getCount() {
// TODO Auto-generated method stub
return 4;
}
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
FragmentManager manager = ((Fragment) object).getFragmentManager();
FragmentTransaction trans = manager.beginTransaction();
trans.remove((Fragment) object);
trans.commit();
super.destroyItem(container, position, object);
}
}
这是我的提示片段:
public class TipsFragment extends Fragment
{
public static TipsFragment newInstance(int image,int content)
{
TipsFragment fragment = new TipsFragment();
return fragment;
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.tip_layout, null);
return view;
}
}
我如何修改我的代码以使用视图而不是片段?
9条答案
按热度按时间yhuiod9q1#
您需要重写这两个方法,而不是
getItem()
:htrmnn0y2#
使用此示例
可以使用单个XML布局嵌套子视图。
但是...你也需要用一个适配器来处理这个问题。这里我们返回找到的视图ID,而不膨胀任何其他布局。
//设置ViewPager适配器
toe950273#
我们构建了一个非常简单的
ViewPager
子类,我们有时会用到它。这个类不需要适配器,因为它将从布局加载视图。为了在您的项目中使用它,只需使用它而不是
android.support.v4.view.ViewPager
。所有花哨的东西仍然会工作,但你不需要为适配器而烦恼。
vcirk6k64#
根据前面的答案,我做了下面的课程,以实现在一个适当的和最清晰的方式(我希望):
你必须在你的活动中设置它:
其中的XML文件是显而易见的view_screen.xml:
ActivtyMain具有以下布局:
非常感谢Brian和Nicholas的回答,我希望我能为这个特性添加一些最清晰的信息和一些好的实践。
bd1hkmkf5#
我想在这里添加我的解决方案。假设你不需要使用片段,你仍然可以创建一个
PagerAdapter
,它将views
而不是fragments
附加到ViewPager
上。扩展
PagerAdapter
而不是FragmentPagerAdapter
现在你需要定义三个类,它们将返回要在
viewpager
中膨胀的views
。类似于CpuView
,你将有MemoryView
和NetworkView
类。它们中的每一个都将膨胀它们各自的布局。最后是一个布局,它将在每个视图中膨胀
**P.S.:**我写这个答案的原因是因为这里提供的所有解决方案看起来都工作得很好,但是它们会膨胀PagerAdapter类本身的布局。对于大型项目来说,如果它们有很多与膨胀的布局相关的代码,那么维护起来就很困难。现在在这个例子中,所有的视图都有单独的类和单独的布局。所以这个项目可以很容易地维护。
hgtggwj06#
我想详细说明一下@Nicholas的答案,您可以通过id获取视图,如果是动态添加的,则只需直接获取给定位置的视图即可
7tofc5zh7#
如果你使用ViewPager2,根据文档说明,你可以使用标准的RecyclerView.Adapter:
如果你打算将片段作为页面使用,那么实现FragmentStateAdapter。如果你的页面是视图,那么照常实现
RecyclerView.Adapter
。(请参阅:)
6yjfywim8#
是的...你可以在视图页中使用视图而不是片段。这里你可以找到一个完整的例子,它将帮助你实现没有片段的视图页。阅读本文档。
https://www.bignerdranch.com/blog/viewpager-without-fragments/
093gszye9#
在ViewPager2中,您根本不需要使用片段。只需像创建RecyclerView Adapter一样创建一个Adapter,并将其设置为ViewPager2即可。
但是,需要记住的一点是,您要扩大的视图的布局高度应该是match_parent,而不是像您对recyclerView所做的那样是wrap_content。
捕捉行为也是相同的。