XListView展示Banner广告图(ViewPager无限轮播)+新闻(多条目)

工具类(解析数据)

public class NetUtil {
    public static NetUtil instance;
    public static NetUtil getInstance(){
        if(instance == null){
            instance = new NetUtil();
        }
        return instance;
    }

    public interface CallBack<T>{
        void gett(T t);
    }

    public void getload(String myuri, final Class clazz, final CallBack callBack){
        new AsyncTask<String, Void, Object>() {
            @Override
            protected Object doInBackground(String... strings) {
                return getload(strings[0],clazz);
            }

            @Override
            protected void onPostExecute(Object o) {
                super.onPostExecute(o);
                callBack.gett(o);
            }
        }.execute(myuri);
    }

    public <E> E getload(String myuri,Class clazz){
        String getloadmessage = getloadmessage(myuri);
        E e = (E) new Gson().fromJson(getloadmessage, clazz);
        return e;
    }

    public String getloadmessage(String myuri){
        String stream = "";
        try {
            URL url = new URL(myuri);
            HttpURLConnection connection = (HttpURLConnection) url.openConnection();
            connection.setConnectTimeout(5000);
            connection.setReadTimeout(5000);
            int responseCode = connection.getResponseCode();
            if(responseCode == 200){
                stream = stream(connection.getInputStream());
            }
        } catch (MalformedURLException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return stream;
    }

    public String stream(InputStream is) throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(is));
        StringBuilder builder = new StringBuilder();
        for (String tmp = br.readLine();tmp != null;tmp = br.readLine()){
            builder.append(tmp);
        }
        return builder.toString();
    }

}

MainActivity (BaseActivity)

public class MainActivity extends AppCompatActivity {

    private XListView xlistview;
    private int flag;
    private MyAdapter adapter;
    private final int COUNT = 20;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        initView();
        initData();
    }

    private void initData() {
        flag = 1;
        xlistview.setPullRefreshEnable(true);
        xlistview.setPullLoadEnable(true);
        adapter = new MyAdapter(this);
        xlistview.setAdapter(adapter);
        xlistview.setXListViewListener(new XListView.IXListViewListener() {
            @Override
            public void onRefresh() {
                flag = 1;
                getinti();
            }

            @Override
            public void onLoadMore() {
                flag ++;
                getinti();
            }
        });

        getinti();
    }

    private void getinti(){
        if(flag == 1){
            getinitimage();
            getinitnew();
        }else {
            getinitnew();
        }
    }

    private String image = "http://172.17.8.100/movieApi/movie/v1/findHotMovieList?page=1&count=10";
    private String newuri = "http://api.expoon.com/AppNews/getNewsList/type/1/p/1";
    private void getinitnew(){
        NetUtil.getInstance().getload(newuri, NewBean.class, new NetUtil.CallBack<NewBean>() {
            @Override
            public void gett(NewBean o) {
                if(o == null){
                    Toast.makeText(MainActivity.this,"请求失败",Toast.LENGTH_SHORT);
                    return;
                }
                if(flag == 1){
                    adapter.setMdata(o.getData());
                }else {
                    adapter.addMdata(o.getData());
                }
                xlistview.stopLoadMore();
                xlistview.stopRefresh();
                /*if(adapter.getCount() < COUNT){
                    xlistview.setPullLoadEnable(false);
                }*/
            }
        });
    }
    private void getinitimage(){
        NetUtil.getInstance().getload(image, BannerBean.class, new NetUtil.CallBack<BannerBean>() {
            @Override
            public void gett(BannerBean o) {
                if(o == null){
                    Toast.makeText(MainActivity.this,"请求失败",Toast.LENGTH_SHORT);
                    return;
                }
                adapter.setMbanner(o.getResult());
            }
        });
    }

    private void initView() {
        xlistview = findViewById(R.id.h_xlistview);
    }
}

MyAdapter

public class MyAdapter extends BaseAdapter {
    private List<BannerBean.Result> mbanner;
    private List<NewBean.Data> mdata;
    private Context context;

    public MyAdapter(Context context) {
        this.context = context;
        mbanner = new ArrayList<>();
        mdata = new ArrayList<>();
    }

    public void setMbanner(List<BannerBean.Result> banner) {
        mbanner.clear();
        if(banner!=null){
            mbanner.addAll(banner);
        }
        notifyDataSetChanged();
    }

    public void setMdata(List<NewBean.Data> data) {
        mdata.clear();
        if(data!=null){
            mdata.addAll(data);
        }
        notifyDataSetChanged();
    }

    public void addMdata(List<NewBean.Data> data) {
        if(data!=null){
            mdata.addAll(data);
        }
        notifyDataSetChanged();
    }
    @Override
    public int getCount() {
        return isbanner()?mdata.size()+1:mdata.size();
    }

    private boolean isbanner(){
        return mbanner.size()>0;
    }

    private final int COUNT = 2;
    private final int NEW_TYPE = 0;
    private final int BANNER_TYPE = 1;
    @Override
    public int getItemViewType(int position) {
        return position == 0 && isbanner()?BANNER_TYPE:NEW_TYPE;
    }

    @Override
    public int getViewTypeCount() {
        return COUNT;
    }

    @Override
    public NewBean.Data getItem(int position) {
        return mdata.get(isbanner()?position-1:position);
    }

    @Override
    public long getItemId(int position) {
        return position;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        if(getItemViewType(position)==BANNER_TYPE){
            ViewHolderbanner holderbanner;
            if(convertView == null){
                convertView = LayoutInflater.from(context).inflate(R.layout.banner_item,parent,false);
                holderbanner = new ViewHolderbanner(convertView);
            }else {
                holderbanner = (ViewHolderbanner) convertView.getTag();
            }
            holderbanner.binddata(context,mbanner);
        }else {
            ViewHoldernew holdernew;
            if(convertView == null){
                convertView = LayoutInflater.from(context).inflate(R.layout.new_item,parent,false);
                holdernew = new ViewHoldernew(convertView);
            }else {
                holdernew = (ViewHoldernew) convertView.getTag();
            }
            holdernew.binddata(getItem(position));
        }
        return convertView;
    }

    class ViewHoldernew{
        TextView text1,text2;
        ImageView image;
        private ViewHoldernew(View con){
            text1 = con.findViewById(R.id.text1_item);
            text2 = con.findViewById(R.id.text2_item);
            image = con.findViewById(R.id.image_item);
            con.setTag(this);
        }
        private void binddata(NewBean.Data list){
            text1.setText(list.getNews_title());
            text2.setText(list.getNews_summary());
            ImageLoader.getInstance().displayImage(list.getPic_url(),image);
        }
    }
    class ViewHolderbanner{
        ViewPager viewPager;
        LinearLayout myshape;
        TextView tilte;
        private ViewHolderbanner(View con){
            viewPager = con.findViewById(R.id.viewpager_item);
            myshape = con.findViewById(R.id.linear_item);
            tilte = con.findViewById(R.id.text_item);
            con.setTag(this);
        }
        private Handler handler = new Handler(){
            @Override
            public void handleMessage(Message msg) {
                super.handleMessage(msg);
                viewPager.setCurrentItem(viewPager.getCurrentItem()+1);
                sendEmptyMessageDelayed(0,2000);
            }
        };
        private void binddata(Context context, List<BannerBean.Result> list){
            handler.removeCallbacksAndMessages(null);
            final MyPagerAdapter adapter = new MyPagerAdapter(list, context);
            viewPager.setAdapter(adapter);
            int count = adapter.getCount()/2;
            count = count - count % mbanner.size();
            viewPager.setCurrentItem(count);
            handler.sendEmptyMessageDelayed(0,2000);
            setshape(mbanner.size());
            viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
                private int index=-1;
                @Override
                public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {

                }

                @Override
                public void onPageSelected(int position) {
                    tilte.setText(adapter.getItem(position).getSummary());
                    myshape.getChildAt(position%myshape.getChildCount()).setSelected(true);
                    if(index>=0){
                        myshape.getChildAt(index%myshape.getChildCount()).setSelected(false);
                    }
                    index = position;
                }

                @Override
                public void onPageScrollStateChanged(int state) {

                }
            });
        }

        private void setshape(int size) {
        myshape.removeAllViews();
            for (int i=0;i<size;i++){
                ImageView imageView = new ImageView(context);
                imageView.setImageResource(R.drawable.selector);
                LinearLayout.LayoutParams params =new LinearLayout.LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT,ViewGroup.LayoutParams.WRAP_CONTENT);
                int marge = (int) TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP,2,context.getResources().getDisplayMetrics());
                params.leftMargin = marge;
                params.rightMargin = marge;
                myshape.addView(imageView,params);
            }

        }
    }
}

PagerAdapter

public class MyPagerAdapter extends PagerAdapter {

    private List<BannerBean.Result> list;
    private Context context;

    public MyPagerAdapter(List<BannerBean.Result> list, Context context) {
        this.list = list;
        this.context = context;
    }



    @Override
    public int getCount() {
        return 5000;
    }

    public BannerBean.Result getItem(int position){
        return list.get(position%list.size());
    }

    @Override
    public boolean isViewFromObject(@NonNull View view, @NonNull Object object) {
        return view == object;
    }

    @NonNull
    @Override
    public Object instantiateItem(@NonNull ViewGroup container, int position) {
        ImageView imageView = new ImageView(context);
        imageView.setScaleType(ImageView.ScaleType.FIT_XY);
        ImageLoader.getInstance().displayImage(getItem(position).getImageUrl(),imageView);
        container.addView(imageView);
        return imageView;
    }

    @Override
    public void destroyItem(@NonNull ViewGroup container, int position, @NonNull Object object) {
        container.removeView((View) object);
    }
}

Application(Image-Loader)

public class App extends Application {



    @Override
    public void onCreate() {
        super.onCreate();
        ImageLoaderConfiguration configuration = null;
        try {
            configuration = new ImageLoaderConfiguration.Builder(this)
                    .defaultDisplayImageOptions(new DisplayImageOptions.Builder()
                            .cacheInMemory(true)
                            .cacheOnDisk(true)
                            .build())
                    .diskCache(new LruDiskCache(new File(Environment.getExternalStorageDirectory(),"image"),new Md5FileNameGenerator(),10*1024*1024))
                    .build();
        } catch (IOException e) {
            e.printStackTrace();
        }
        ImageLoader.getInstance().init(configuration);
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值