ViewPager显示不出,找不到原因

winton_by 2015-07-05 10:32:09
package ad;

import java.util.ArrayList;
import java.util.List;

import android.content.Context;
import android.support.v4.view.PagerAdapter;
import android.support.v4.view.ViewPager;
import android.util.AttributeSet;
import android.util.DisplayMetrics;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.ImageView.ScaleType;
import android.widget.LinearLayout;

import com.winton.baseview.R;

public class AdShowContainer extends LinearLayout{
private ViewPager adParent;
private Context mContext;

List<ImageView> adList;

public AdShowContainer(Context context){
super(context);
mContext=context;
}

public AdShowContainer(Context context ,AttributeSet attrs){
super(context, attrs);
mContext=context;
}

public AdShowContainer(Context context,AttributeSet attrs,int defStyle){
super(context,attrs,defStyle);
mContext=context;
LayoutInflater.from(context).inflate(R.layout.layout_show_ad, this, true);
adParent=new ViewPager(mContext);
DisplayMetrics dm = getResources().getDisplayMetrics();
adParent.setLayoutParams(new LayoutParams(dm.widthPixels, dm.heightPixels * 2 / 5));
initData();
this.addView(adParent);
}
public void initData(){
adList=new ArrayList<ImageView>();
int[] imageResource={
R.drawable.ad1,
R.drawable.ad1,
R.drawable.ad1
};
for(int imageId:imageResource){
ImageView ad=new ImageView(mContext);
ad.setImageResource(imageId);
ad.setScaleType(ScaleType.FIT_XY);
adList.add(ad);
}

adParent.setFocusable(true);
adParent.setAdapter(new myViewPagerAdapter());
adParent.setCurrentItem(0);
}

private class myViewPagerAdapter extends PagerAdapter{

@Override
public void destroyItem(ViewGroup container, int position, Object object) {
// TODO Auto-generated method stub
container.removeView(adList.get(position));
}

@Override
public void finishUpdate(ViewGroup container) {
// TODO Auto-generated method stub
super.finishUpdate(container);
}

@Override
public int getCount() {
// TODO Auto-generated method stub
return adList==null?0:adList.size();
}

@Override
public int getItemPosition(Object object) {
// TODO Auto-generated method stub
return super.getItemPosition(object);
}

@Override
public Object instantiateItem(ViewGroup container, int position) {
// TODO Auto-generated method stub
container.addView(adList.get(position));
return adList.get(position);
}

@Override
public boolean isViewFromObject(View arg0, Object arg1) {
// TODO Auto-generated method stub
return arg0==arg1;
}

}


}


代码如上。调用的代码如下
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
>
<ad.AdShowContainer
android:id="@+id/ad"
android:layout_width="match_parent"
android:layout_height="120dp"
android:layout_alignParentTop="true"
android:layout_marginBottom="2dp"
android:layout_centerHorizontal="true"
android:background="@color/black" />

</RelativeLayout>


不知道为什么,显示不出来,高手给点思路
...全文
1671 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
winton_by 2015-07-08
  • 打赏
  • 举报
回复
引用 13 楼 wenwen091100304 的回复:
[quote=引用 12 楼 u014165119 的回复:] [quote=引用 9 楼 wenwen091100304 的回复:] [quote=引用 3 楼 u014165119 的回复:] 改一下构造方法,你没发现你第三个用来生成ViewPager的构造方法根本没执行吗?

public AdShowContainer(Context context){
        this(context, null);
    }
     
    public AdShowContainer(Context context ,AttributeSet attrs){
        this(context, attrs, 0);
    }
     
    public AdShowContainer(Context context,AttributeSet attrs,int defStyle){
        super(context,attrs,defStyle);
		mContext = context;
                // 这句不知道干嘛的,没什么用,给你注释掉了
		// LayoutInflater.from(context).inflate(R.layout.layout_show_ad, this,
		// true);
        adParent=new ViewPager(mContext);
        DisplayMetrics dm = getResources().getDisplayMetrics();      
        adParent.setLayoutParams(new LayoutParams(dm.widthPixels, dm.heightPixels * 2 / 5));
        initData();
        this.addView(adParent);
    }
没有效果[/quote] 我是在你代码的基础上改的,测试能显示ViewPager,你用这三个构造方法覆盖你的三个方法[/quote] 改过了,一样,还是没用[/quote] 嗯嗯,改好了,谢谢,我发现是这句影响的 LayoutInflater.from(context).inflate(R.layout.layout_show_ad, this, true);注释掉就好了
StoneHui_ 2015-07-07
  • 打赏
  • 举报
回复

import java.util.ArrayList;
import java.util.List;

import android.content.Context;
import android.support.v4.view.PagerAdapter;
import android.support.v4.view.ViewPager;
import android.util.AttributeSet;
import android.util.DisplayMetrics;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.ImageView.ScaleType;
import android.widget.LinearLayout;

public class AdShowContainer extends LinearLayout{
    private ViewPager adParent;
    private Context mContext;

    List<ImageView> adList;

    public AdShowContainer(Context context){
        this(context, null);
//        mContext=context;
    }

    public AdShowContainer(Context context ,AttributeSet attrs){
        this(context, attrs, 0);
//        mContext=context;
    }

    public AdShowContainer(Context context,AttributeSet attrs,int defStyle){
        super(context,attrs,defStyle);
        mContext=context;
//        LayoutInflater.from(context).inflate(R.layout.layout_show_ad, this, true);
        adParent=new ViewPager(mContext);
        DisplayMetrics dm = getResources().getDisplayMetrics();
        adParent.setLayoutParams(new LayoutParams(dm.widthPixels, dm.heightPixels * 2 / 5));
        initData();
        this.addView(adParent);
    }
    public void initData(){
        adList=new ArrayList<ImageView>();
        // TODO 修改回你自己的图片
        int[] imageResource={
                R.drawable.go_back_normal,
                R.drawable.go_refresh_press,
                R.drawable.go_forward_normal
        };
        for(int imageId:imageResource){
            ImageView ad=new ImageView(mContext);
            ad.setImageResource(imageId);
            ad.setScaleType(ScaleType.FIT_XY);
            adList.add(ad);
        }

        adParent.setFocusable(true);
        adParent.setAdapter(new myViewPagerAdapter());
        adParent.setCurrentItem(0);
    }

    private class myViewPagerAdapter extends PagerAdapter{

        @Override
        public void destroyItem(ViewGroup container, int position, Object object) {
            // TODO Auto-generated method stub
            container.removeView(adList.get(position));
        }

        @Override
        public void finishUpdate(ViewGroup container) {
            // TODO Auto-generated method stub
            super.finishUpdate(container);
        }

        @Override
        public int getCount() {
            // TODO Auto-generated method stub
            return adList==null?0:adList.size();
        }

        @Override
        public int getItemPosition(Object object) {
            // TODO Auto-generated method stub
            return super.getItemPosition(object);
        }

        @Override
        public Object instantiateItem(ViewGroup container, int position) {
            // TODO Auto-generated method stub
            container.addView(adList.get(position));
            return adList.get(position);
        }

        @Override
        public boolean isViewFromObject(View arg0, Object arg1) {
            // TODO Auto-generated method stub
            return arg0==arg1;
        }

    }


}
效果图,只能看到图片的一部分,调整一下ImageView的配置就好了,如果还不能显示ViewPager,检查一下你图片是不是上半部分没有东西或者AdShowContainer 这个View是不是被其他的组件盖遮住了。
winton_by 2015-07-07
  • 打赏
  • 举报
回复
引用 12 楼 u014165119 的回复:
[quote=引用 9 楼 wenwen091100304 的回复:] [quote=引用 3 楼 u014165119 的回复:] 改一下构造方法,你没发现你第三个用来生成ViewPager的构造方法根本没执行吗?

public AdShowContainer(Context context){
        this(context, null);
    }
     
    public AdShowContainer(Context context ,AttributeSet attrs){
        this(context, attrs, 0);
    }
     
    public AdShowContainer(Context context,AttributeSet attrs,int defStyle){
        super(context,attrs,defStyle);
		mContext = context;
                // 这句不知道干嘛的,没什么用,给你注释掉了
		// LayoutInflater.from(context).inflate(R.layout.layout_show_ad, this,
		// true);
        adParent=new ViewPager(mContext);
        DisplayMetrics dm = getResources().getDisplayMetrics();      
        adParent.setLayoutParams(new LayoutParams(dm.widthPixels, dm.heightPixels * 2 / 5));
        initData();
        this.addView(adParent);
    }
没有效果[/quote] 我是在你代码的基础上改的,测试能显示ViewPager,你用这三个构造方法覆盖你的三个方法[/quote] 改过了,一样,还是没用
StoneHui_ 2015-07-07
  • 打赏
  • 举报
回复
引用 9 楼 wenwen091100304 的回复:
[quote=引用 3 楼 u014165119 的回复:] 改一下构造方法,你没发现你第三个用来生成ViewPager的构造方法根本没执行吗?

public AdShowContainer(Context context){
        this(context, null);
    }
     
    public AdShowContainer(Context context ,AttributeSet attrs){
        this(context, attrs, 0);
    }
     
    public AdShowContainer(Context context,AttributeSet attrs,int defStyle){
        super(context,attrs,defStyle);
		mContext = context;
                // 这句不知道干嘛的,没什么用,给你注释掉了
		// LayoutInflater.from(context).inflate(R.layout.layout_show_ad, this,
		// true);
        adParent=new ViewPager(mContext);
        DisplayMetrics dm = getResources().getDisplayMetrics();      
        adParent.setLayoutParams(new LayoutParams(dm.widthPixels, dm.heightPixels * 2 / 5));
        initData();
        this.addView(adParent);
    }
没有效果[/quote] 我是在你代码的基础上改的,测试能显示ViewPager,你用这三个构造方法覆盖你的三个方法
vKazz 2015-07-06
  • 打赏
  • 举报
回复
把你的调用Viewpager的代码贴出来看一下
Leon_He2014 2015-07-06
  • 打赏
  • 举报
回复
应该是initData没有执行吧!打印个log试试就知道啦。 三个构造方法里面多应该调用初始化的代码。你现在只有第三个调用了
中才德创 2015-07-06
  • 打赏
  • 举报
回复
AdShowContainer注销掉前面两个构造函数试试报错了没?
StoneHui_ 2015-07-06
  • 打赏
  • 举报
回复
改一下构造方法,你没发现你第三个用来生成ViewPager的构造方法根本没执行吗?

public AdShowContainer(Context context){
        this(context, null);
    }
     
    public AdShowContainer(Context context ,AttributeSet attrs){
        this(context, attrs, 0);
    }
     
    public AdShowContainer(Context context,AttributeSet attrs,int defStyle){
        super(context,attrs,defStyle);
		mContext = context;
                // 这句不知道干嘛的,没什么用,给你注释掉了
		// LayoutInflater.from(context).inflate(R.layout.layout_show_ad, this,
		// true);
        adParent=new ViewPager(mContext);
        DisplayMetrics dm = getResources().getDisplayMetrics();      
        adParent.setLayoutParams(new LayoutParams(dm.widthPixels, dm.heightPixels * 2 / 5));
        initData();
        this.addView(adParent);
    }
winton_by 2015-07-06
  • 打赏
  • 举报
回复
引用 4 楼 HawkOfWinter 的回复:
AdShowContainer注销掉前面两个构造函数试试报错了没?
注销掉会报错的。
winton_by 2015-07-06
  • 打赏
  • 举报
回复
引用 3 楼 u014165119 的回复:
改一下构造方法,你没发现你第三个用来生成ViewPager的构造方法根本没执行吗?

public AdShowContainer(Context context){
        this(context, null);
    }
     
    public AdShowContainer(Context context ,AttributeSet attrs){
        this(context, attrs, 0);
    }
     
    public AdShowContainer(Context context,AttributeSet attrs,int defStyle){
        super(context,attrs,defStyle);
		mContext = context;
                // 这句不知道干嘛的,没什么用,给你注释掉了
		// LayoutInflater.from(context).inflate(R.layout.layout_show_ad, this,
		// true);
        adParent=new ViewPager(mContext);
        DisplayMetrics dm = getResources().getDisplayMetrics();      
        adParent.setLayoutParams(new LayoutParams(dm.widthPixels, dm.heightPixels * 2 / 5));
        initData();
        this.addView(adParent);
    }
没有效果
winton_by 2015-07-06
  • 打赏
  • 举报
回复
引用 6 楼 hbsfxyxxj 的回复:
public Object instantiateItem(ViewGroup container, int position) { // TODO Auto-generated method stub ((ViewPaper)container).addView(adList.get(position)); return adList.get(position); } 试一下。
没用
winton_by 2015-07-06
  • 打赏
  • 举报
回复
引用 2 楼 z23546498 的回复:
把你的调用Viewpager的代码贴出来看一下
动态添加的
hbsfxyxxj 2015-07-06
  • 打赏
  • 举报
回复
public Object instantiateItem(ViewGroup container, int position) { // TODO Auto-generated method stub ((ViewPaper)container).addView(adList.get(position)); return adList.get(position); } 试一下。
winton_by 2015-07-05
  • 打赏
  • 举报
回复
顶一顶,快来人

80,351

社区成员

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

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