标签: android-pageradapter

为什么在PagerAdapter中多次调用getCount?

我今天注意到PagerAdapter被大量调用.当慢慢滚动页面时,我计算了393.我看到了这个问题,但它并没有给我一个很好的答案.

  1. 这是正常的行为吗?
  2. 如果是这样,为什么经常调用getCount方法呢?

为了清楚起见,我正在寻找一个比所提问题更广泛的答案.我也意识到我需要保持它的速度,并且我无法控制它的调用方式,但这不是问题所在.

android android-viewpager android-pageradapter

13
推荐指数
1
解决办法
2751
查看次数

不推荐使用PagerAdapter.instantiateItem()方法

我很好奇为什么instantiateItem被弃用以支持它的新版本.变化是它现在接受ViewGroup而不是更普遍View.

不推荐的方法

public Object instantiateItem (View container, int position)
Run Code Online (Sandbox Code Playgroud)

新方法

public Object instantiateItem (ViewGroup container, int position)
Run Code Online (Sandbox Code Playgroud)

注意:这种变化也发生在destroyItem,startUpdate,finishUpdatesetPrimaryItem.

android android-pageradapter

12
推荐指数
1
解决办法
7690
查看次数

无法过滤PagedList?

我已经使用Android的分页库(https://developer.android.com/topic/libraries/architecture/paging.html)实现了分页回收视图.它在获取数据和检索后续页面时工作正常.但是,如何过滤PagedList?假设我有一个搜索小部件,我想搜索当前屏幕上的列表.PagedList.filter()返回a List并且PagedListAdapter.setList()不接受a List.

android pagedlist android-pageradapter android-recyclerview

12
推荐指数
1
解决办法
1982
查看次数

使用PagerAdapter的IllegalStateException

我在此活动中收到IllegalStateException但不太确定发生了什么.这是QuickContactActivity中的ViewPagerAdapter类.

private class ViewPagerAdapter extends FragmentPagerAdapter {
    public ViewPagerAdapter(FragmentManager fragmentManager) {
        super(fragmentManager);
    }

    @Override
    public Fragment getItem(int position) {
        QuickContactListFragment fragment = new QuickContactListFragment();
        final String mimeType = mSortedActionMimeTypes.get(position);
        final List<Action> actions = mActions.get(mimeType);
        fragment.setActions(actions);
        return fragment;
    }

    @Override
    public int getCount() {
        return mSortedActionMimeTypes.size();
    }
}
Run Code Online (Sandbox Code Playgroud)

这是崩溃日志:

07-15 09:49:21.060: E/com.##.##.##.Application(12378): Thread uncaught exception:
07-15 09:49:21.060: E/com.##.##.##.Application(12378): java.lang.IllegalStateException: The application's PagerAdapter changed the adapter's contents without calling PagerAdapter#notifyDataSetChanged! Expected adapter item count: 0, found: 1 Pager id: com.##.##.android:id/item_list_pager Pager class: …
Run Code Online (Sandbox Code Playgroud)

android illegalstateexception fragmentpageradapter android-pageradapter

11
推荐指数
1
解决办法
3万
查看次数

Android View寻呼机适配器显示空屏幕

我正在实现一个Pager Adapter Fragment.当我第一次加载屏幕时,它工作正常.如果我切换到其他片段并再次转到上一个片段,它会显示空屏幕.如果我在不同的点击之间滑动并再次移动到第一个标签,则会显示数据.

我认为在向后移动可见的标签时没有加载数据,但是一旦它们在滑动导航期间不在视图中,它就会加载数据.

这是我的寻呼机适配器:

public class MyPagerAdapter extends FragmentPagerAdapter {

    public MyPagerAdapter(FragmentManager fm) {
        super(fm);
    }

    @Override
    public Fragment getItem(int index) {
        switch (index) {
        case 0:
            return new Fragment1();
        case 1:
            return new Fragment2();
        case 2:
            return new Fragment3();
        case 3:
            return new Fragment4();
        case 4:
            return new Fragment5();
        case 5:
            return new Fragment6();
        }

        return null;
    }

    @Override
    public int getCount() {
        return 6;
    }
}
Run Code Online (Sandbox Code Playgroud)

我正在设置我的适配器:

viewPager = (ViewPager) rootView.findViewById(R.id.my_pager);
        mAdapter = new …
Run Code Online (Sandbox Code Playgroud)

android android-fragments android-pageradapter

11
推荐指数
2
解决办法
1万
查看次数

在Android中正确实现PagerAdapter

我在实现自定义PagerAdapter时遇到问题,并将其与ViewPager一起使用.此示例PagerAdapter有10个项目,每个项目都是一个按钮,其索引为文本.当我运行程序时,我看到一个文本"1"的按钮为"0".当我刷到其他项目时,我只得到空白视图.当我向后滑动时有时会看到一个带有一些数字的按钮,但它会消失(可能它正在破坏并将其从容器中移除),有时我会看到一个带有数字的按钮,但数字在刷卡后会发生变化(我认为我创建了一个新的Button,然后将其添加到容器中,由于某些原因,viewpager显示了这个新按钮.

我该如何解决这个实现?我没有看到例子中的差异.

我的PagerAdapter实现:

public class MyPagerAdapter extends PagerAdapter {

    @Override
    public int getCount() {
        return 10;
    }

    @Override
    public boolean isViewFromObject(View view, Object o) {
        return o.getClass()==view.getClass();
    }

    @Override
    public Object instantiateItem(ViewGroup container, int position) {
        Button button = new Button(container.getContext());
        ViewGroup.LayoutParams params = new ActionBar.LayoutParams(-1,-1);
        button.setLayoutParams(params);
        button.setText(String.valueOf(position));
        container.addView(button);
        return button;
    }

    @Override
    public void destroyItem(ViewGroup container, int position, Object object) {
        container.removeView((Button)object);
    }
}
Run Code Online (Sandbox Code Playgroud)

我的活动:

public class MainActivity extends ActionBarActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main); …
Run Code Online (Sandbox Code Playgroud)

java android android-viewpager android-pageradapter

11
推荐指数
2
解决办法
3万
查看次数

如果单击上一项,Android PagerAdapter不会报告正确的位置

我有一个ViewPager w /负边距设置为获得这样的效果: 在此输入图像描述

现在,我想要发生的是当我点击当前视图左侧或右侧的视图时.它应该选择该视图并在ViewPager上调用setCurrentItem().这适用于当前项右侧的视图,但不适用于当前项左侧的视图.当我点击该视图时,报告给我的位置是当前视图的位置.

如果它有帮助,这里有一些代码.这是来自PagerAdapter.instantiateItem(),我在onClick()上触发:

    @Override
    public Object instantiateItem(final ViewGroup container, final int position)
    {
        cardLayout.setTag(profile);
        cardLayout.setOnClickListener(new View.OnClickListener()
        {
            @Override
            public void onClick(View view)
            {
                // mOnItemClickListener passed in to adapter on initialization
                mOnItemClickListener.onItemClick(null, view, position, 0);
                // other stuff happens here as well
            }
        });
    }
Run Code Online (Sandbox Code Playgroud)

整个PagerAdapter类适用于任何有兴趣的人:

static class GiveTenPagerAdapter extends PagerAdapter
{
    private final int ANIMATION_DURATION;
    private ListenerOnGiveTakeClick mListenerOnGiveTakeClick;
    private List<GiveTen> mGiveTens;
    private Context mContext;
    private LayoutInflater mInflater;

    private boolean mIsCrossFadeAnimationRunning;
    private int mSquarePhotoSideLength;

    GiveTenPagerAdapter(List<GiveTen> giveTens, Context context, …
Run Code Online (Sandbox Code Playgroud)

android android-pageradapter

10
推荐指数
1
解决办法
1098
查看次数

PagerAdapter类被多次调用

我正在开发一个有ViewPager视图的应用程序,我创建了一个PagerAdapter,它有视图,PagerAdapter的instantiateItem()方法在create()中被调用两次我不知道为什么,任何人都可以帮助我这个?

这是我的代码,

         View PagerView;
        MyPagerAdapter adapter;
        ViewPager pager;

            adapter = new MyPagerAdapter();     
    pager.setAdapter(adapter);
    pager.setCurrentItem(0);

public class MyPagerAdapter extends PagerAdapter {

        @Override
        public Object instantiateItem(final View collection, final int position) {
            Log.d("Inside", "Pager");
            PagerView = new View(collection.getContext());
            LayoutInflater inflater = (LayoutInflater) collection.getContext()
                    .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            PagerView = inflater.inflate(R.layout.tablemenu, null, false);
            tbMenuDetails = (TableLayout) PagerView
                    .findViewById(R.id.Menutable1);
            scrollview = (ScrollView) PagerView.findViewById(R.id.scrollView1);
            tbMenuDetails.removeAllViews();
            removeTableRows();
            createTableLayout(position);
            String str[][] = datasource.GetSubMenuDetailsFromMenuId(MenuIdlst
                    .get(position).trim());
            Log.d("Str", "" + str.length);
            for (int i = 0; i < str.length; i++) {
                addRows(str[i][1], str[i][2], …
Run Code Online (Sandbox Code Playgroud)

android android-viewpager android-pageradapter

9
推荐指数
1
解决办法
8938
查看次数

FragmentPagerAdapter的问题

我正在尝试使用viewpager和片段制作幻灯片,这样我就可以为每个片段加载不同的布局,并为每个页面提供不同的功能.

我按照教程来完成这个.

我在悬停时遇到的错误public Fragment getItem(int arg0):返回类型与之不兼容FragmentPagerAdapter.getItem(int)

和错误#2:构造函数FragmentPagerAdapter(FragmentManager)未定义 - >在悬停时获取此构造函数super(fm);

package com.example.spui;

import android.os.Bundle;
import android.app.Fragment;
import android.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;

public class MyFragmentPagerAdapter extends FragmentPagerAdapter{

    final int PAGE_COUNT = 5;

    /** Constructor of the class */
    public MyFragmentPagerAdapter(FragmentManager fm) {
        super(fm);
    }

    /** This method will be invoked when a page is requested to create */
    @Override
    public Fragment getItem(int arg0) {

        MyFragment myFragment = new MyFragment();
        Bundle data = new Bundle();
        data.putInt("current_page", …
Run Code Online (Sandbox Code Playgroud)

android android-fragments android-viewpager fragmentpageradapter android-pageradapter

9
推荐指数
1
解决办法
1万
查看次数

FragmentPagerAdapter与ViewPager之间的区别与OffScreenLimit设置为1和FragmentStatePagerAdapter?

FragmentPagerAdapterViewPager与OffScreenLimit设置为1和FragmentStatePagerAdapter?之间有什么区别?

关于FragmentPagerAdapterGoogle的指南说:

此版本的寻呼机最适合在有少量通常更多静态片段进行分页时使用,例如一组选项卡.用户访问的每个页面的片段将保留在内存中,但其视图层次结构可能在不可见时被销毁.这可能导致使用大量内存,因为片段实例可以保持任意数量的状态.对于较大的页面集,请考虑FragmentStatePagerAdapter.

关于FragmentStatePagerAdapter:

当存在大量页面时,此版本的寻呼机更有用,更像列表视图.当页面对用户不可见时,它们的整个片段可能被破坏,只保留该片段的保存状态.与FragmentPagerAdapter相比,这允许寻呼机保持与每个被访问页面相关联的更少的存储器,代价是在页面之间切换时可能具有更多的开销.

我想如果我将offscreenlimit设置为1,它会破坏当前片段的下两个片段之外的所有片段,并且它的行为类似于FragmentStatePagerAdapter.它是否正确?

android android-fragments android-viewpager android-pageradapter

9
推荐指数
1
解决办法
6363
查看次数