我有一个寻呼机适配器,假设膨胀表示日历的复杂视图.
每年的日历需要大约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) 在我的应用程序中,我使用了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) 所以我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
我用自定义视图寻呼机适配器创建视图寻呼机但是当我运行项目时我看不到任何东西
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) 我有一个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
我有一个带有自定义PagerAdapter的ViewPager,它覆盖方法getPageWidth返回0.3f,所以我可以在屏幕上显示多个页面,如下面的博客所示:
http://commonsware.com/blog/2012/08/20/multiple-view-viewpager-options.html
在这种情况下,ViewPager开始为空,用户开始按要求填充页面(图像).图像从左到右填充.一切正常,页面是动态创建的,当有多个图像时,很容易在它们之间滑动.
但是,实例化的页面少于三页时会出现问题.从右侧(无内容)到左侧的滑动手势会产生闪烁,页面从左向右交替移动,就像ViewPager试图将第一页向右移动但稍后转向其原始位置一样.这在整个手势期间发生,并在离开手势时停止.正如我所说,当有足够的页面覆盖整个屏幕宽度并且需要真正的滚动时,这不会发生.
有任何想法吗?
当我关闭屏幕并重新打开时,我的应用程序关闭.
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
我的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
.Fragment
3被删除后notifyDataSetChanged
,当前Fragment
仍然是用户看到的片段,正在加载的数据来自SavedInstance
捆绑所以最终的结果是用户仍然看到Fragment
他试图删除的相同,这对他来说有点不好意思.
想法?
我有一个10页的ViewPager.当我开始onCreateView()
调用我的片段的最后一个(第10个)页面方法时.当我滑到第9页时onCreateView()
也被调用.但是当我回到第10页时onCreateView()
没有被调用.怎么了?
android android-fragments android-viewpager android-pageradapter
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)是什么呢?