标签: android-pageradapter

如何为PagerAdapter实现视图回收机制?

我有一个寻呼机适配器,假设膨胀表示日历的复杂视图.

每年的日历需要大约350毫秒才能充气.

为了提高性能,我想实现ListView回收视图(convertView参数输入getView())的数组适配器中存在的相同机制.

这是getView()来自适配器的电流.

@Override
protected View getView(VerticalViewPager pager, final DateTileGrid currentDataItem, int position)
{
    mInflater = LayoutInflater.from(pager.getContext());

        // This is were i would like to understand weather is should use a recycled view or create a new one.
    View datesGridView = mInflater.inflate(R.layout.fragment_dates_grid_page, pager, false);


    DateTileGridView datesGrid = (DateTileGridView) datesGridView.findViewById(R.id.datesGridMainGrid);
    TextView yearTitle = (TextView) datesGridView.findViewById(R.id.datesGridYearTextView);
    yearTitle.setText(currentDataItem.getCurrentYear() + "");
    DateTileView[] tiles = datesGrid.getTiles();

    for (int i = 0; i < 12; i++)
    { …
Run Code Online (Sandbox Code Playgroud)

android convertview android-viewpager android-pageradapter

29
推荐指数
1
解决办法
9948
查看次数

Android:FragmentPagerAdapter:第一次调用两次getItem方法

在我的应用程序中,我使用了ViewPager.喜欢,

(say main.xml)

<android.support.v4.view.ViewPager
     android:id="@+id/viewPager"
     android:layout_width="fill_parent"
     android:layout_height="fill_parent"
     android:layout_above="@+id/register_header" />
Run Code Online (Sandbox Code Playgroud)

并在FragmentActivity中创建ViewPager对象和ViewPagerAdapter(它扩展了FragmentPagerAdapter)对象.

_mViewPager = (ViewPager) findViewById(R.id.viewPager);

_adapter = new ViewPagerAdapter(getApplicationContext(),
         getSupportFragmentManager());

_mViewPager.setAdapter(_adapter);
Run Code Online (Sandbox Code Playgroud)

而Adapter类就像,

public class ViewPagerAdapter extends FragmentPagerAdapter {
    private Context _context;
    private FragmentManager manager;
    private Fragment f;
    private String classname="ViewPagerAdapter";
    public ViewPagerAdapter(Context context, FragmentManager fm) {
        super(fm);  
        _context=context;
        manager=fm;
        }
    @Override
    public Fragment getItem(int position) {
        Log.i(classname,"getItem called"+position);
        f = new Fragment();
        f=MyFragment.newInstance();
        Bundle args = new Bundle();
        args.putInt("position", position);
        f.setArguments(args);
        return f;
    }

    @Override
    public int getCount() {
        return User.getPageCount(); …
Run Code Online (Sandbox Code Playgroud)

android android-pageradapter

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

更改屏幕方向后,从ViewPager的适配器中销毁项目

所以我ViewPager在屏幕方向改变后从屏幕中删除(删除)一个页面时出现问题.我将尝试在以下几行中描述问题.

我正在使用FragmentStatePagerAdapter适配器ViewPager和一个小接口来描述无限视图寻呼机应该如何工作.它背后的想法是你可以滚动到右边,直到你到达结束ViewPager.如果您可以从API调用加载更多结果,则会显示进度页面,直到结果出现.

一切都很好,直到现在,问题来了.如果在这个加载过程中,我旋转屏幕(这不会影响API调用,这基本上是一个AsyncTask),当调用返回时,应用程序崩溃给我这个异常:

E/AndroidRuntime(13471): java.lang.IllegalStateException: Fragment ProgressFragment{42b08548} is not currently in the FragmentManager
E/AndroidRuntime(13471):    at android.support.v4.app.FragmentManagerImpl.saveFragmentInstanceState(FragmentManager.java:573)
E/AndroidRuntime(13471):    at android.support.v4.app.FragmentStatePagerAdapter.destroyItem(FragmentStatePagerAdapter.java:136)
E/AndroidRuntime(13471):    at mypackage.OutterFragment$PagedSingleDataAdapter.destroyItem(OutterFragment.java:609)
Run Code Online (Sandbox Code Playgroud)

在库的代码中挖掘了一下之后,似乎mIndex片段的数据字段小于0这种情况,这就引发了异常.

以下是寻呼机适配器的代码:

static class PagedSingleDataAdapter extends FragmentStatePagerAdapter implements
        IEndlessPagerAdapter {

    private WeakReference<OutterFragment> fragment;
    private List<DataItem> data;
    private SparseArray<WeakReference<Fragment>> currentFragments = new SparseArray<WeakReference<Fragment>>();

    private ProgressFragment progressElement;

    private boolean isLoadingData;

    public PagedSingleDataAdapter(SherlockFragment fragment, List<DataItem> data) {
        super(fragment.getChildFragmentManager());
        this.fragment = new WeakReference<OutterFragment>(
                (OutterFragment) fragment);
        this.data = data; …
Run Code Online (Sandbox Code Playgroud)

android android-viewpager android-pageradapter fragmentstatepageradapter

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

ViewPager没有显示任何内容

我用自定义视图寻呼机适配器创建视图寻呼机但是当我运行项目时我看不到任何东西

  public class CustomAdapter extends PagerAdapter {

        private List<NewsObject> newsObjects;
        private Activity mActivity;
        private LayoutInflater inflater;
        private ImageLoaderConfiguration imageConfig;
        private ImageLoader imageLoader = ImageLoader.getInstance();

        public CustomAdapter(List<NewsObject> newsObjects, Activity mActivity) {
            super();
            Log.d("Con :", "structor");
            this.newsObjects = newsObjects;
            this.mActivity = mActivity;
            imageConfig = new ImageLoaderConfiguration.Builder(
                    mActivity.getApplicationContext()).build();
            imageLoader.init(imageConfig);
        }

        @Override
        public int getCount() {
            return this.newsObjects.size();
        }

        @Override
        public void destroyItem(View collection, int position, Object view) {
            ((ViewPager) collection).removeView((View) view);
        }

        @Override
        public boolean isViewFromObject(View view, Object object) {
            return view == …
Run Code Online (Sandbox Code Playgroud)

java android android-viewpager android-pageradapter

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

FragmentPagerAdapter - 当用户转到新标签时如何检测滑动或标签点击?

我有一个MainActivity有三个片段FragmentPagerAdapter如下所示.如何通过滑动或单击选项卡,如何找出用户从第一个片段到第二个片段或从第二个片段到第二个片段的时间?我看到这个getItem()方法并没有像我声明的那样被调用mViewPager.setOffscreenPageLimit(2);

public class MainThreeTabAdapter extends FragmentPagerAdapter {

    private final String[] CONTENT = new String[]{"News", "Rewards", "Me"};

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

    @Override
    public Fragment getItem(int position) {
        if (position == 0) {
            return NewsFragment.newInstance();
        } else if (position == 1) {
            return RewardsFragment.newInstance();
        } else if (position == 2) {
            return MeFragment.newInstance(true, App.getAccountData().getId());
        } else {
            return null;
        }

    }

    @Override
    public CharSequence getPageTitle(int position) {
        return CONTENT[position % CONTENT.length];
    } …
Run Code Online (Sandbox Code Playgroud)

android android-tabhost android-fragments android-viewpager android-pageradapter

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

当使用PagerAdapter的getPageWidth时,Android ViewPager滚动问题只有一个项目

我有一个带有自定义PagerAdapter的ViewPager,它覆盖方法getPageWidth返回0.3f,所以我可以在屏幕上显示多个页面,如下面的博客所示:

http://commonsware.com/blog/2012/08/20/multiple-view-viewpager-options.html

在这种情况下,ViewPager开始为空,用户开始按要求填充页面(图像).图像从左到右填充.一切正常,页面是动态创建的,当有多个图像时,很容易在它们之间滑动.

但是,实例化的页面少于三页时会出现问题.从右侧(无内容)到左侧的滑动手势会产生闪烁,页面从左向右交替移动,就像ViewPager试图将第一页向右移动但稍后转向其原始位置一样.这在整个手势期间发生,并在离开手势时停止.正如我所说,当有足够的页面覆盖整个屏幕宽度并且需要真正的滚动时,这不会发生.

有任何想法吗?

android android-viewpager android-pageradapter

17
推荐指数
2
解决办法
4189
查看次数

ViewPager PagerObserver未注册

当我关闭屏幕并重新打开时,我的应用程序关闭.

Logcat告诉我这个错误的原因是指向我的CourseFragment.class中的java第60行,它扩展了Fragment.

mViewPager.setAdapter(infoTechPageAdapter);
Run Code Online (Sandbox Code Playgroud)

我在CourseFragment.class中实现了一个ViewPager,它扩展了Fragment.

这是我的代码:

public class CourseFragment extends Fragment {

public static final String ARG_POSITION_NUMBER = "course_number";

private int position;

public CourseFragment() {
    // Empty constructor required for fragment subclasses
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
        Bundle savedInstanceState) {

    View rootView;
    position = getArguments().getInt("position");

    String course = getResources().getStringArray(
            R.array.array_navigation_drawer)[position];

    getActivity().setTitle(course);

    rootView = inflater.inflate(R.layout.activity_drawer_fragment,
            container, false);

    return rootView;
}// end onCreateView

@Override
public void onStart() {
    super.onStart();

    ViewPager mViewPager = (ViewPager) getActivity().findViewById(
            R.id.pagerYear);

    Log.i("posit", String.valueOf(position));
    switch (position) { …
Run Code Online (Sandbox Code Playgroud)

android android-fragments android-viewpager android-pageradapter android-navigation

17
推荐指数
1
解决办法
6858
查看次数

PagerAdapter.notifyDataSetChanged不刷新片段

我的Activity包含a ViewPager和它的自定义Adapter扩展FragmentStatePagerAdapter.ViewPager包含3个片段

用于从ViewPager中删除片段的代码

MainActivity

public void deleteElement(){
    final int currentItem = mViewPager.getCurrentItem();
    mPagerAdapter.removeItem(currentItem);
    mPagerAdapter.notifyDataSetChanged();
}
Run Code Online (Sandbox Code Playgroud)

CustomPagerAdapter

private ArrayList<Item> data;
public void removeItem(int index){
        data.remove(index);
}
Run Code Online (Sandbox Code Playgroud)

删除中间Fragment(索引1)时:

  • data我删除正确的item.
  • 问题是我(我猜)Fragment3被删除后notifyDataSetChanged,当前Fragment仍然是用户看到的片段,正在加载的数据来自SavedInstance捆绑

所以最终的结果是用户仍然看到Fragment他试图删除的相同,这对他来说有点不好意思.

想法?

android android-viewpager android-pageradapter

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

ViewPager - 并不总是调用onCreateView

我有一个10页的ViewPager.当我开始onCreateView()调用我的片段的最后一个(第10个)页面方法时.当我滑到第9页时onCreateView()也被调用.但是当我回到第10页时onCreateView()没有被调用.怎么了?

android android-fragments android-viewpager android-pageradapter

15
推荐指数
2
解决办法
9886
查看次数

关于PagerAdapter的方法instantiateItem(ViewGroup容器,int位置)的一些混淆

public Object instantiateItem(ViewGroup container, int position) {
      ImageView view = new ImageView();
      container.addView(view);
      return view;
}
Run Code Online (Sandbox Code Playgroud)

我读了一些PagerAdapter的示例代码,他们都编写了addview方法.以上是一些简单的代码,而且我知道'return view'用于返回显示的视图,但是container.addView(view)是什么呢?

android adapter android-pageradapter

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