Android ViewPager实例化Item()返回错误的位置值
我是android编程的初学者。 我正在使用按钮onclick使用下面的代码向viewpager添加新页面。但是,在滑动活动上实例化项目时,viewpager返回错误的位置值 向右滑动 正确位置:1、2、3(第2、3和4页) 返回错误的位置:2、3、4 向左滑动 正确位置:3、2、1(第4、3和2页) 返回错误的位置:2,1,0 我想从InstanceItem()中获取位置值,以便从要显示在viewpager上的“视图”数组列表中的特定位置获取视图。错误的位置导致显示错误的视图。希望有人能帮助我!!!提前谢谢 添加按钮:Android ViewPager实例化Item()返回错误的位置值,android,android-viewpager,layout-inflater,Android,Android Viewpager,Layout Inflater,我是android编程的初学者。 我正在使用按钮onclick使用下面的代码向viewpager添加新页面。但是,在滑动活动上实例化项目时,viewpager返回错误的位置值 向右滑动 正确位置:1、2、3(第2、3和4页) 返回错误的位置:2、3、4 向左滑动 正确位置:3、2、1(第4、3和2页) 返回错误的位置:2,1,0 我想从InstanceItem()中获取位置值,以便从要显示在viewpager上的“视图”数组列表中的特定位置获取视图。错误的位置导致显示错误的视图。希望有人能帮助我
findViewById(R.id.btnAdd).setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View itemView = inflater.inflate(R.layout.image_text_1, null);
// the array list
views.add(itemView);
pagerAdapter.notifyDataSetChanged();
}
});
private class SlideAdapter extends PagerAdapter {
ArrayList<View> views = new ArrayList<View>();
@Override
public int getItemPosition (Object object)
{
int index = views.indexOf((View)object);
if(views.contains((View)object)){
return index;
}else{
return POSITION_NONE;
}
}
@Override
public Object instantiateItem (ViewGroup container, final int position)
{
//for example, when I swipe to the right from page 1 to page 2, the int position return value of 2 instead of 1.
View v = views.get(position);
imagePage = (ImageView) v.findViewById(R.id.imgSlide);
imagePage.setOnLongClickListener(null);
imagePage.setLongClickable(true);
imagePage.setOnLongClickListener(btnImageChoose);
((ViewPager)container).addView(v, 0);
return v;
}
@Override
public void destroyItem (ViewGroup container, int position, Object object)
{
container.removeView (views.get(position));
}
@Override
public int getCount ()
{
return views.size();
}
@Override
public boolean isViewFromObject (View view, Object object)
{
return view == object;
}
public int addView (View v)
{
return addView (v, views.size());
}
public int addView (View v, int position)
{
views.add (position, v);
return position;
}
public int removeView (ViewPager pager, View v)
{
return removeView (pager, views.indexOf (v));
}
public int removeView (ViewPager pager, int position)
{
pager.setAdapter (null);
views.remove (position);
pager.setAdapter (this);
return position;
}
public View getView (int position)
{
return views.get (position);
}
}
查看页面:
findViewById(R.id.btnAdd).setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View itemView = inflater.inflate(R.layout.image_text_1, null);
// the array list
views.add(itemView);
pagerAdapter.notifyDataSetChanged();
}
});
private class SlideAdapter extends PagerAdapter {
ArrayList<View> views = new ArrayList<View>();
@Override
public int getItemPosition (Object object)
{
int index = views.indexOf((View)object);
if(views.contains((View)object)){
return index;
}else{
return POSITION_NONE;
}
}
@Override
public Object instantiateItem (ViewGroup container, final int position)
{
//for example, when I swipe to the right from page 1 to page 2, the int position return value of 2 instead of 1.
View v = views.get(position);
imagePage = (ImageView) v.findViewById(R.id.imgSlide);
imagePage.setOnLongClickListener(null);
imagePage.setLongClickable(true);
imagePage.setOnLongClickListener(btnImageChoose);
((ViewPager)container).addView(v, 0);
return v;
}
@Override
public void destroyItem (ViewGroup container, int position, Object object)
{
container.removeView (views.get(position));
}
@Override
public int getCount ()
{
return views.size();
}
@Override
public boolean isViewFromObject (View view, Object object)
{
return view == object;
}
public int addView (View v)
{
return addView (v, views.size());
}
public int addView (View v, int position)
{
views.add (position, v);
return position;
}
public int removeView (ViewPager pager, View v)
{
return removeView (pager, views.indexOf (v));
}
public int removeView (ViewPager pager, int position)
{
pager.setAdapter (null);
views.remove (position);
pager.setAdapter (this);
return position;
}
public View getView (int position)
{
return views.get (position);
}
}
私有类SlideAdapter扩展了PagerAdapter{
ArrayList视图=新建ArrayList();
@凌驾
public int getItemPosition(对象)
{
int index=views.indexOf((视图)对象);
if(views.contains((视图)对象)){
收益指数;
}否则{
返回位置\无;
}
}
@凌驾
公共对象实例化项(视图组容器,最终int位置)
{
//例如,当我从第1页向右滑动到第2页时,int position返回的值是2而不是1。
视图v=视图。获取(位置);
imagePage=(ImageView)v.findViewById(R.id.imgSlide);
imagePage.setOnLongClickListener(空);
imagePage.setLongClickable(真);
设置OnLongClickListener(btnImageChoose);
((ViewPager)容器).addView(v,0);
返回v;
}
@凌驾
公共项(视图组容器、int位置、对象)
{
container.removeView(views.get(position));
}
@凌驾
公共整数getCount()
{
返回视图。size();
}
@凌驾
公共布尔值isViewFromObject(视图,对象)
{
返回视图==对象;
}
公共int添加视图(视图v)
{
返回addView(v,views.size());
}
公共内部添加视图(视图v,内部位置)
{
视图。添加(位置,v);
返回位置;
}
public int removeView(视图寻呼机,视图v)
{
返回removeView(pager,views.indexOf(v));
}
公共int removeView(视图寻呼机寻呼机,int位置)
{
pager.setAdapter(空);
视图。移除(位置);
pager.setAdapter(此);
返回位置;
}
公共视图getView(内部位置)
{
返回视图.get(位置);
}
}
您不需要使用视图数组列表:
class SamplePagerAdapter extends PagerAdapter {
// for example
List<String> str = new ArrayList<String>();
public SamplePagerAdapter(List<String> str){
this.str = str;
}
private void addPage(String item) {
str.add(item);
notifyDataSetChanged();
}
@Override
public int getCount() {
return str.size();
}
@Override
public View instantiateItem(ViewGroup container, int position) {
LayoutInflater inflater = LayoutInflater.from(container.getContext());
View v = inflater.inflate(R.layout.image_text_1, container, false);
// Your code. (don't use addView);
return v;
}
}
您不需要使用视图数组列表:
class SamplePagerAdapter extends PagerAdapter {
// for example
List<String> str = new ArrayList<String>();
public SamplePagerAdapter(List<String> str){
this.str = str;
}
private void addPage(String item) {
str.add(item);
notifyDataSetChanged();
}
@Override
public int getCount() {
return str.size();
}
@Override
public View instantiateItem(ViewGroup container, int position) {
LayoutInflater inflater = LayoutInflater.from(container.getContext());
View v = inflater.inflate(R.layout.image_text_1, container, false);
// Your code. (don't use addView);
return v;
}
}
这似乎不是实例化项()的问题。我从setPrimaryItem()获取当前视图
这似乎不是实例化项()的问题。我从setPrimaryItem()获取当前视图
我真的不明白你的问题是什么,但你知道Java数组是零索引的,对吗?换句话说,第一个视图是索引0,第二个视图是索引1等等,这里的1指的是第2页。我不太明白你的问题是什么,但你知道Java数组是零索引的,对吗?换句话说,第一个视图是索引0,第二个视图是索引1等等,这里的1指的是第2页。