Articles of android viewpager

FragmentStatePagerAdapter onPageSelected事件

我有一个FragmentStatePagerAdapter,里面有6个片段。 每个Fragment连接到服务器并加载数据。 现在,服务器连接正在Fragment.onStart()中完成,这意味着在任何时候,我都有3个http请求(选定的片段,每侧一个)。 我想要的是当时只有一个连接,所以我打算使用 viewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() { @Override public void onPageSelected(final int position) { CustomFragment fragment = (CustomFragment) myFragmentStatePagerAdapter.getItem(position); fragment.onSelected();//do stuff in here } }); 问题是, getItem()返回片段的新实例,尚未添加到管理器中(因此,尚未创建视图等)。 另外,我已经尝试过setUserVisibleHint(boolean isVisibleToUser)但是在isVisibleToUser = false时没有被调用。 那么,如何为Fragment实现“onPageSelected()”事件呢? 提前致谢

适用于ViewPager的Android Viewholder

您好我正在使用ViewPager但我现在想要保留状态,而不是重新生成单元格。 我注意到viewpager非常类似于listview的自定义适配器,并且它们的function类似于listview在不再在屏幕上重新生成数据的情况,viewpager是相同的方式。 有没有办法在最初加载之后执行viewholder,某种保留每个视图状态的对象,以便viewpager单元加载更快。 (每个单元格都有一些处理和渲染,但我会自己测试内存的限制) 这是我的观察者

在ViewPager中使用View或Fragment

我有一个关于是否在ViewPager中使用View或Fragment的问题。 背景:我有一个包含ListView的Activity A. 每个ListView项打开活动B.活动B显示不同的内容,具体取决于在活动A中点击的ListView项。活动B的内容显示在ListView中。 问题:现在,我不需要在活动A和B之间来回切换内容,而是要求实现水平视图滑动以在活动B中切换所有内容。我find的一个解决方案(尝试它并且它起作用)是创建Activity B的ListView的许多实例,并与ViewPager + PagerAdapter一起使用。 在doc上find的另一个可能的解决方案(尚未尝试过)是将ListView引入Fragment,创建片段的许多实例并将其与ViewPager + FragmentPagerAdapter或FragmentStatePagerAdapter一起使用。 我的问题是,使用每种方法有什么好处? 我是否应该解决将ListView引入Fragment或只是简单地将ListView与ViewPager一起使用的麻烦? 谢谢

ViewPager中的片段返回空对象onResume

我使用FragmentPagerAdapter从片段切换。 我需要在制作片段开关时调用一些函数,并且在OnPause和OnResume上遇到一些麻烦,所以这个问题的建议我实现了一个接口OnPageSelectListener: public interface OnPageSelectListener { void onPageSelected(); void onPageNotVisible(); } 只要此页面到达前台,它就会调用OnPageSelected函数。 工作得很好,除了我想在我的适配器上调用一个函数。 我认为这样可行,除了我的适配器一直返回NULL(即使它被初始化并且数据在我的列表视图中被加载为首选)。 public class AfterCheckFragment extends Fragment implements OnPageSelectListener{ private ListView listView; private List checkList; private CheckListAdapter adapter; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // Inflate the layout for this fragment View view = inflater.inflate(R.layout.fragment_check, container, false); System.out.println(“VIEW create […]

Android:导航抽屉片段内的Viewpager

我正在开发一个Android应用程序,我需要的是在导航抽屉的一个片段中实现一个Viewpager或Tabs。 我已经在本教程中实现了导航抽屉: 导航抽屉教程 现在我的导航抽屉由3个片段组成。 片段A,片段B,片段C. 片段A如何为此片段添加Viewpager?

具有嵌套片段的ViewPager?

我的问题 根据谷歌的文档: 您现在可以将片段嵌入片段中。 这对于您希望将动态和可重用的UI组件放入自身动态且可重用的UI组件的各种情况都很有用。 例如, 如果使用ViewPager创建 向左和向右滑动并占用大部分屏幕空间的 片段 , 则现在可以将片段插入到每个片段页面中。 要嵌套片段,只需在要添加片段的片段上调用getChildFragmentManager()。 这将返回一个FragmentManager,您可以像通常从顶级活动那样使用它来创建片段事务。 例如,这里有一些代码可以在现有的Fragment类中添加一个片段: Fragment videoFragment = new VideoPlayerFragment(); FragmentTransaction transaction = getChildFragmentManager().beginTransaction(); transaction.add(R.id.video_fragment, videoFragment).commit(); 所以我创建了自己的PageFragment 。 我的PageFragmentAdapter由3页PageFragmentAdapter组成。 我还有六个片段: Fragment1 , Fragment2 , Fragment3 , FragmentA , FragmentB , FragmentC 。 在我的MainActivity我初始化了我的六个片段,我的ViewPager和它的PageFragmentAdapter (它自己初始化了三个PageFragment )。 然后我使用这个方法将Fragment1 , Fragment2 , Fragment3附加到PageFragment每个页面(到每个PageFragment ): PageFragmentAdapter tPageFragmentAdapter = new PageFragmentAdapter(getSupportFragmentManager()); tPageFragmentAdapter.setFirstPage(tFragment1); […]

Android oncreateview调用了两次

我已经不止一次地看到这个问题,但是我无法弄明白如何解决我的问题。 我有一个用户执行此操作的应用: 1 – 打开navigationDrawer并选择一个选项(创建一个片段)(我在这里选择第二个选项); public void selectItem(int position) { Fragment fragment = null; switch (position) { case FRAGMENT_OPTION1: … break; case FRAGMENT_OPTION2: fragment = ControlPanelFragment.newInstance(); break; … case FRAGMENT_OPTIONN: … return; default: break; } if (fragment != null) { FragmentManager fragmentManager = getSupportFragmentManager(); fragmentManager.beginTransaction().replace(R.id.fragment_container, fragment).commitAllowingStateLoss(); } } 2 – 加载所选选项(ControlPanelFragment):2.1 – 控制面板有选项卡和iconpager。 对于每个寻呼机页面和每个选项卡,都会创建一个新的片段。 我有3个标签和3个页面,因此创建了9个片段; […]

包含TableLayouts的片段的ViewPager加载缓慢:

我正在使用ViewPager开发一个Activity,其中包含Fragments(每次最多4个片段),每个包含TableLayout 。 所以基本上加载了4个表。 这是将数据加载到Fragment的代码, Fragment稍后附加到ViewPager : public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { if (container == null) { return null; } LinearLayout.LayoutParams layoutParams=new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT); layoutParams.gravity=Gravity.CENTER_VERTICAL; layoutParams.setMargins(10, 0, 0, 0); fragmetLayout = (LinearLayout)inflater.inflate(R.layout.grid_fragment_layout, container, false); table = (TableLayout) fragmetLayout.findViewById(R.id.tlGridTable); llParameterContainer = (LinearLayout) fragmetLayout.findViewById(R.id.llParametersContainer); tabName = (TextView) fragmetLayout.findViewById(R.id.tvTabName); tabName.setText(tab.getTabName()); //tabName.setLayoutParams(layoutParams); for (Parameter parameter : […]

在viewpager中使用backstack和back按钮

我正在使用viewpager在片段之间滑动,并希望后退按钮导航到先前查看的片段而不是结束活动。 很抱歉,如果这是这个问题的副本,但我没有find答案非常有帮助。 显然onBackPressed需要被覆盖,但我不知道如何获取并显示正确的片段。 我假设我应该使用fragmentmanager的backstack,但是getSupportFragmentManager().getBackStackEntryCount()总是返回0.我是否需要使用FragmentTransaction.addToBackStack()手动将片段添加到backstack? 如果是这样,我会在适配器中添加它? 这是我活动的代码, public class PagerActivity extends FragmentActivity { ArrayList sales; MyAdapter mAdapter; ViewPager mPager; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Intent it = getIntent(); this.sales = (ArrayList) it.getExtras().get(“sales”); int position = it.getExtras().getInt(“position”); ActionBar actionBar = getActionBar(); actionBar.setDisplayHomeAsUpEnabled(true); setContentView(R.layout.fragment_pager); mAdapter = new MyAdapter(getSupportFragmentManager()); mPager = (ViewPager) findViewById(R.id.pager); mPager.setAdapter(mAdapter); mPager.setCurrentItem(position); } public […]

Android中不同宽度的布局在ViewPager中

我想使用Horizo​​ntal View Pager创建一些滚动视图。 左视图必须具有全屏宽度,但只有四分之一宽度(它将是Dolphin浏览器中的垂直面板)。 这可能吗? 我在正确的布局中改变了android:layout_width ,但它没有用。 我的代码: public class TestActivity extends FragmentActivity { @Override public void onCreate(final Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main_view); MyPagerAdapter adapter = new MyPagerAdapter(); ViewPager pager = (ViewPager) findViewById(R.id.panelPager); pager.setAdapter(adapter); pager.setCurrentItem(0); } } main_view.xml MyPagerAdapter.java public class MyPagerAdapter extends PagerAdapter { @Override public int getCount() { return 2; } @Override public […]