ViewPager 加载自定义View

elly_che 2015-05-29 03:12:54

求教:
有list<User> 里面有id name age 属性,我把每个对象的id,name,age显示在图二里面,然后加载到图一的viewpager中。
而且点击图一的“左”“右”以及手势滑动 都能实现viewpager滑动
请问下这个需求应该怎么实现?
...全文
729 29 打赏 收藏 转发到动态 举报
写回复
用AI写文章
29 条回复
切换为时间正序
请发表友善的回复…
发表回复
栀暖莺飞 2015-06-05
  • 打赏
  • 举报
回复
这边这样:

if (mViewPager.getCurrentItem() >= listFragments.size()-1)
{
return;
}
else
{
mViewPager.setCurrentItem(mViewPager.getCurrentItem() + 1);
mPageAdapter.notifyDataSetChanged();
}
栀暖莺飞 2015-06-05
  • 打赏
  • 举报
回复
adapter里面这样改:
@Override
public int getCount()
{
return listFragments.size();
}


mainactivity这样改:

@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mViewPager = (ViewPager)findViewById(R.id.mViewPager);
left = (Button)findViewById(R.id.button1);
right = (Button)findViewById(R.id.button2);
igone = (Button)findViewById(R.id.button3);
User u1 = new User(1, "shu", 11);
User u2 = new User(2, "wei", 22);
User u3 = new User(3, "yi", 33);
listUser.add(u1);
listUser.add(u2);
listUser.add(u3);

for (User user : listUser)
{
listFragments.add(new UserInfoFragment(user));
}
final PageAdapter mPageAdapter = new PageAdapter(getSupportFragmentManager(), listFragments);
mViewPager.setAdapter(mPageAdapter);

left.setOnClickListener(new OnClickListener()
{

@Override
public void onClick(View arg0)
{
if (mViewPager.getCurrentItem() <= 0)
{
return;
}
else
{
mViewPager.setCurrentItem(mViewPager.getCurrentItem() - 1);
mPageAdapter.notifyDataSetChanged();
}
}
});

right.setOnClickListener(new OnClickListener()
{

@Override
public void onClick(View arg0)
{
if (mViewPager.getCurrentItem() >= listFragments.size())
{
return;
}
else
{
mViewPager.setCurrentItem(mViewPager.getCurrentItem() + 1);
mPageAdapter.notifyDataSetChanged();
}
}
});
igone.setOnClickListener(new OnClickListener()
{

@Override
public void onClick(View arg0)
{
if (listFragments.size() == 0)
{
return;
}
listFragments.remove(mViewPager.getCurrentItem());
mViewPager.setAdapter(new PageAdapter(getSupportFragmentManager(), listFragments));
}
});
}
elly_che 2015-06-05
  • 打赏
  • 举报
回复
引用 31 楼 qq115787813 的回复:
adapter继承改成FragmentStatePagerAdapter就没问题了
可以了 谢谢大大。
栀暖莺飞 2015-06-05
  • 打赏
  • 举报
回复
adapter继承改成FragmentStatePagerAdapter就没问题了
栀暖莺飞 2015-06-05
  • 打赏
  • 举报
回复
adapter继承改成FragmentStatePagerAdapter就没问题了
elly_che 2015-06-05
  • 打赏
  • 举报
回复
引用 28 楼 qq115787813 的回复:
这边这样: if (mViewPager.getCurrentItem() >= listFragments.size()-1) { return; } else { mViewPager.setCurrentItem(mViewPager.getCurrentItem() + 1); mPageAdapter.notifyDataSetChanged(); }
麻烦大大你了。 这段代码的意思是:如果viewpager的当前页 小于 listFragments的数量-1,那么viewPager移动到当页前的前面一页去。 这里应该是点击向右的逻辑吧? 而且我按照你上面的代码来。就是说因为我的getCount()方法之前写死了是3.然后改为return listFragments.size()现在是动态的了。然后点删除是可以,但是无论我在哪一页点删除,它都会自动删除最后一页。 但是 listFragments.remove(mViewPager.getCurrentItem());这句代码不是控制的删除的当前页吗?
elly_che 2015-06-04
  • 打赏
  • 举报
回复
http://download.csdn.net/detail/elly_che/8770759 这个是下载链接,有时间的大大麻烦帮我调试一下。就那个删除按钮没有完成了。谢谢了
  • 打赏
  • 举报
回复
帮你定了,我也不会
elly_che 2015-06-04
  • 打赏
  • 举报
回复
引用 23 楼 qq115787813 的回复:
if (lsitF.size() == 0) { return; } lsitF.remove( viewpage.getCurrentItem()); viewpage.setAdapter(new StatePagerAdapter(getSupportFragmentManager(), lsitF)); 删了重新setAdapter。
这样点击删除能删除第二页,然后向右滑动到第三页再划回去第二页又出现了。 而且第一页和第三页不能删除。
elly_che 2015-06-03
  • 打赏
  • 举报
回复
引用 9 楼 qq115787813 的回复:
你remove的是fragmentList吗?报的错是什么


我是这样写的
igone.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View arg0) {
listFragments.remove(i);
mPageAdapter.notifyDataSetChanged();
}
});

下面是报错

KJ_Wang 2015-06-03
  • 打赏
  • 举报
回复
看我的文章吧,里面有相关的内容
栀暖莺飞 2015-06-03
  • 打赏
  • 举报
回复
if (lsitF.size() == 0)
{
return;
}
lsitF.remove( viewpage.getCurrentItem());
viewpage.setAdapter(new StatePagerAdapter(getSupportFragmentManager(), lsitF));

删了重新setAdapter。
JPF1024 2015-06-03
  • 打赏
  • 举报
回复
这样把,你把你的源码打包(公司项目就不要打包了),发到CSDN或者百度网盘,然后让有环境的同学帮你调试一下把。。。
栀暖莺飞 2015-06-03
  • 打赏
  • 举报
回复
listFragments.remove(viewpage.getCurrentItem());看看
elly_che 2015-06-03
  • 打赏
  • 举报
回复
引用 18 楼 qxs965266509 的回复:
[quote=引用 14 楼 elly_che 的回复:] [quote=引用 12 楼 qxs965266509 的回复:] [quote=引用 11 楼 elly_che 的回复:] [quote=引用 9 楼 qq115787813 的回复:] 你remove的是fragmentList吗?报的错是什么
我是这样写的 igone.setOnClickListener(new OnClickListener() { @Override public void onClick(View arg0) { listFragments.remove(i); mPageAdapter.notifyDataSetChanged(); } }); 下面是报错 [/quote] 你的这个是数组下标越界了,listFragments.remove(i);这行出错了,list总共长度是1,下标是从0开始的,所以你的会出现这个错误[/quote] 请问下我应该怎么删除当前显示的哪一页?[/quote] 现在你的size是1,只能移除remove(0),[/quote] 我在oncreate里面 list.add了3个对象 然后在填充到Fragment里面的。 我是点了三次igone(销毁按钮)点第四次的时候就报错了
elly_che 2015-06-03
  • 打赏
  • 举报
回复
引用 16 楼 dcxy0 的回复:
[quote=引用 15 楼 elly_che 的回复:] [quote=引用 13 楼 dcxy0 的回复:]

igone.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View arg0) {
if(listFragments.size()>0){
listFragments.remove(i);
mPageAdapter.notifyDataSetChanged();
}
}
});


这样写试试.
这样写也是这样 我生成的fragment有3个 然后点igone点4下就会挂了。 是不是因为 我listFragments是确实删除了 但是页面没有更新显示?但是mPageAdapter.notifyDataSetChanged();这句不是更新显示吗?[/quote] 调试一下看看,按理说应该是不会出现问题的了。[/quote] 调试看不出来我。 还是这种错误。 java.lang.IndexOutOfBoundsException: Invalid index 2, size is 0
JPF1024 2015-06-03
  • 打赏
  • 举报
回复
引用 15 楼 elly_che 的回复:
[quote=引用 13 楼 dcxy0 的回复:]

igone.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View arg0) {
if(listFragments.size()>0){
listFragments.remove(i);
mPageAdapter.notifyDataSetChanged();
}
}
});


这样写试试.
这样写也是这样 我生成的fragment有3个 然后点igone点4下就会挂了。 是不是因为 我listFragments是确实删除了 但是页面没有更新显示?但是mPageAdapter.notifyDataSetChanged();这句不是更新显示吗?[/quote] 调试一下看看,按理说应该是不会出现问题的了。
elly_che 2015-06-03
  • 打赏
  • 举报
回复
引用 13 楼 dcxy0 的回复:

igone.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View arg0) {
if(listFragments.size()>0){
listFragments.remove(i);
mPageAdapter.notifyDataSetChanged();
}
}
});


这样写试试.
这样写也是这样 我生成的fragment有3个 然后点igone点4下就会挂了。 是不是因为 我listFragments是确实删除了 但是页面没有更新显示?但是mPageAdapter.notifyDataSetChanged();这句不是更新显示吗?
elly_che 2015-06-03
  • 打赏
  • 举报
回复
引用 12 楼 qxs965266509 的回复:
[quote=引用 11 楼 elly_che 的回复:] [quote=引用 9 楼 qq115787813 的回复:] 你remove的是fragmentList吗?报的错是什么
我是这样写的 igone.setOnClickListener(new OnClickListener() { @Override public void onClick(View arg0) { listFragments.remove(i); mPageAdapter.notifyDataSetChanged(); } }); 下面是报错 [/quote] 你的这个是数组下标越界了,listFragments.remove(i);这行出错了,list总共长度是1,下标是从0开始的,所以你的会出现这个错误[/quote] 请问下我应该怎么删除当前显示的哪一页?
JPF1024 2015-06-03
  • 打赏
  • 举报
回复

igone.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View arg0) {
if(listFragments.size()>0){
listFragments.remove(i);
mPageAdapter.notifyDataSetChanged();
}
}
});


这样写试试.
加载更多回复(9)

80,351

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧