XListView+ViewPager

本文介绍了一个具体的Android应用开发案例,包括使用ViewPager实现页面切换、XListView实现上下滑动加载更多功能,以及通过AsyncTask进行后台数据请求等关键技术点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

public class MainActivity extends AppCompatActivity {
//=============Viewpager===========
    ViewPager  vp;
    TextView  tv;
    RadioGroup  rg;
//===========list============
    Been      been;
    List<Been.StoriesBean>   list;
    Mylistadapter   lvadapter;
//=============vp+list ===========
    XListView xlv;
    List<ViewPager>  vplist;
    View view;

    int n=2;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        ImageLoaderConfiguration configuration=ImageLoaderConfiguration.createDefault(this);
        ImageLoader.getInstance().init(configuration);
        DisplayImageOptions options=DisplayImageOptions.createSimple();



        //===========viewpager的控件==========
        vp=(ViewPager) findViewById(R.id.vp);
        tv=(TextView) findViewById(R.id.tv);
        rg=(RadioGroup) findViewById(R.id.rg);
       //===============listview的控件
        xlv= (XListView) findViewById(R.id.xlv);
        list=new ArrayList<Been.StoriesBean>();
        intoData(1);

        //xlistview设置一下
        xlv.setPullLoadEnable(true);//这个是允许下拉加载
        xlv.setPullRefreshEnable(true);//允许下拉刷新
        //xlv的监听
        xlv.setXListViewListener(new XListView.IXListViewListener() {
            @Override
            //刷新
            public void onRefresh() {
                //再次调用方法
                intoData(1);
                //刷新
                lvadapter.notifyDataSetChanged();
                //停止刷新图片的使用
                xlv.stopRefresh();
            }
           //加载
            @Override
            public void onLoadMore() {
                //n的依次相加
                n++;
                //依次相加n
                intoData(n);
                //停止加载图片的使用
                xlv.stopLoadMore();

            }
        });
        lvadapter=new Mylistadapter();
        xlv.setAdapter(lvadapter);

        vp.setAdapter(new Myadapter(getSupportFragmentManager()));
        //vp的监听事件
        vp.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
            @Override
            public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
                switch (position)
                {
                    case 0:
                        rg.check(R.id.b1);
                        tv.setText("头条新闻1");
                        break;
                    case 1:
                        rg.check(R.id.b2);
                        tv.setText("头条新闻2");
                        break;

                    case 2:
                        rg.check(R.id.b3);
                        tv.setText("头条新闻3");
                        break;

                    case 3:
                        rg.check(R.id.b4);
                        tv.setText("头条新闻4");
                        break;

                }
            }

            @Override
            public void onPageSelected(int position) {

            }

            @Override
            public void onPageScrollStateChanged(int state) {

            }
        });

        //==============vp+list===========
        xlv=(XListView) findViewById(R.id.xlv);

    }
//创建vp的适配器
    class Myadapter extends FragmentPagerAdapter{
        public Myadapter(FragmentManager fm) {
            super(fm);
        }

        @Override
        public Fragment getItem(int position) {
            Fragment fm=null;
            switch (position)
            {
                case 0:
                    fm=new Fragment1();
                    break;
                case 1:
                    fm=new Fragment2();
                    break;

                case 2:
                    fm=new Fragment3();
                    break;

                case 3:
                    fm=new Fragment4();
                    break;

            }
            return fm;
        }

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

//===============lv的操作================
    class  Mylistadapter extends BaseAdapter{
    @Override
    public int getCount() {
        if(list!=null)
        {
            return  list.size();
        }
        return 0;
    }

    @Override
    public Object getItem(int i) {
        return null;
    }

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

    @Override
    public View getView(final  int i, View view, ViewGroup viewGroup) {
        ViewHolder holder;
        if(view==null)
        {
            holder=new ViewHolder();
            view=View.inflate(MainActivity.this,R.layout.lv_item,null);
            holder.iv=(ImageView) view.findViewById(R.id.iv123);
            holder.title=(TextView) view.findViewById(R.id.title111);
            holder.ga_prefix=(TextView) view.findViewById(R.id.ga_prefix);
            view.setTag(holder);

        }else {
            holder=(ViewHolder) view.getTag();
        }
        holder.title.setText(list.get(i).getTitle());
        holder.ga_prefix.setText(list.get(i).getGa_prefix());
        ImageLoader.getInstance().displayImage(list.get(i).getImages().get(0),holder.iv);
        return view;
    }
}

    class ViewHolder{
        ImageView  iv;
        TextView   title;
        TextView   ga_prefix;
    }
    //方法
    private void intoData(final int n){
        new AsyncTask<String,String,String>(){
            @Override
            protected String doInBackground(String... strings) {
                String str=getUrl();
                return str;
            }
            @Override
            protected void onPostExecute(String s) {
                Gson gson=new Gson();
                been=gson.fromJson(s,Been.class);
                //判断n的数值
                if(n!=1){
                    //拼接集合
                    list.addAll(been.getStories());
                }else{
                    //第一次的集合实例化
                    list=been.getStories();
                }
                lvadapter.notifyDataSetChanged();
                super.onPostExecute(s);
            }
        }.execute();
    }



//创建解析网址的方法
    private String getUrl(){
        String strUlr="";
        try {
            URL url=new URL("https://news-at.zhihu.com/api/4/news/latest");
            HttpURLConnection connection=(HttpURLConnection) url.openConnection();
            connection.setRequestMethod("GET");
            int code=connection.getResponseCode();
            if(code==200)
            {
                InputStream  inputStream=connection.getInputStream();
                ByteArrayOutputStream bos=new ByteArrayOutputStream();
                int len=-1;
                byte[] b=new byte[1024];
                while ((len=inputStream.read(b))!=-1){
                    bos.write(b,0,len);
                }
                strUlr=new String(bos.toByteArray());
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return   strUlr;
    }



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值