use*_*993 1 java android android-viewpager
我尝试使用滑动图像进行简单的应用.我使用这篇文章http://www.androidbegin.com/tutorial/android-viewpager-gallery-images-and-texts-tutorial/.
这是我的xml with viewpager:main.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal" >
<android.support.v4.view.ViewPager
android:id="@+id/pages"
android:layout_height="match_parent"
android:layout_width="match_parent">
</android.support.v4.view.ViewPager>
</LinearLayout>
Run Code Online (Sandbox Code Playgroud)
这是我的xml with image:item.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent" >
<ImageView
android:id="@+id/image"
android:layout_gravity="center"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:src="@drawable/ic_launcher" />
</RelativeLayout>
Run Code Online (Sandbox Code Playgroud)
这是我的适配器:ViewerPagerAdapter.java
public class ViewerPagerAdapter extends PagerAdapter {
private Context mContext;
private ArrayList<CueModel> mArray;
private LayoutInflater mInflater;
private ImageView mImage;
public ViewerPagerAdapter(Context _context){
mContext = _context;
mInflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
public void setArray(ArrayList<Bitmap> arr){
mArray = arr;
}
@Override
public int getItemPosition(Object object) {
return POSITION_NONE;
}
@Override
public Object instantiateItem(ViewGroup container, int position) {
View itemView = mInflater.inflate(R.layout.item, container, false);
mImage = (ImageView)itemView.findViewById(R.id.image);
mImage.setImageBitmap(mArray.get(position));
container.addView(itemView);
return itemView;
}
@Override
public int getCount() {
return mArray.size();
}
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
container.removeView((View)object);
}
@Override
public boolean isViewFromObject(View arg0, Object arg1) {
return arg0.equals(arg1);
}
Run Code Online (Sandbox Code Playgroud)
这是我的活动:OneActivity.java(充满图像的mArrays)
public class OneActivity extends Activity {
ArrayList<Bitmap> mArrays;
ViewerPagerAdapter mAdapter;
ViewPager mPager;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main.xml);
mPager = (ViewPager) findViewById(R.id.pages);
mAdapter = new ViewerPagerAdapter(OneActivity.this);
mAdapter.setArrays(mArrays);
mPager.setAdapter(mAdapter);
}
}
Run Code Online (Sandbox Code Playgroud)
我不明白我做错了什么.instantiateItem不调用.
PS.Difference我的应用程序和
文章我有一些活动(我的arraylist由项目初始化)谢谢
#instantiateItem()只要ViewPager需要新视图,就会调用它.最初,它将#instantiateItem()为中心的View 调用两次,如果适配器的话,则向右查看getCount() > 0.这就是为什么在你的#setArray()方法中你需要#notifyDataSetChanged()每次更改数组时调用.每次添加或删除列表中的项目时,还需要调用它.如果你的数组是空的#onCreate(),那么#getCount() == 0ViewPager认为它是空的并且不会打扰.
我知道这是一个很老的帖子,但我正在回答这个问题,因为有人会从中受益。我遇到了同样的问题 -instantiateItem ()没有接到电话。在尝试了很多事情之后,我终于找到了我在代码中犯的错误,这是一个愚蠢的错误,我忘记将适配器设置为 viewpager:
viewPager.setAdapter(adapter)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7196 次 |
| 最近记录: |