XListView的下拉刷新,上拉加载

     

MainActivity类

public class MainActivity extends Activity {
    //全局变量
    private List<NewsListData> list = new ArrayList<NewsListData>();
    XListView xlv;
    MyXListViewAdapter adapter;
    int path = 1;
    boolean flag=true;
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //找控件
        xlv=(XListView) findViewById(R.id.xlv);
        //调用异步加载数据的方法
        initData();
        //创建适配器
        adapter=new MyXListViewAdapter();
        //设置适配器
        xlv.setAdapter(adapter);
        //设置下拉刷新状态
        xlv.setPullRefreshEnable(true);
        //设置上拉加载状态
        xlv.setPullLoadEnable(true);
        //设置下拉刷新的时间
        xlv.setRefreshTime("2017-10-18");
        //XListView的点击
        xlv.setXListViewListener(new IXListViewListener() {
            
            @Override
            public void onRefresh() {
                 //如果flag为false就下拉刷新数据
                flag=false;
                //刷新数据为最初数据
                path=1;
                //调用异步加载数据的方法
                initData();
                //吐司
                Toast.makeText(MainActivity.this, "path目前等于:"+path, 0).show();
                 //停止刷新
                xlv.stopRefresh();
            }
            
            @Override
            public void onLoadMore() {
                // 如果flag=true;就上拉加载数据
                flag=true;
                path++;
                //调用异步加载数据的方法
                initData();
                //吐司
                Toast.makeText(MainActivity.this, "path目前等于:"+path, 0).show();
                //停止加载
                xlv.stopLoadMore();
            }
        });
    }
    //创建适配器
    public class MyXListViewAdapter extends BaseAdapter {

        @Override
        public int getCount() {
            // TODO Auto-generated method stub
            if (list != null) {
                return list.size();
            }
            return 0;
        }

        @Override
        public Object getItem(int position) {
            // TODO Auto-generated method stub
            return position;
        }

        @Override
        public long getItemId(int position) {
            // TODO Auto-generated method stub
            return 0;
        }

        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            // 优化
            ViewHolder holder;
            if (convertView == null) {
                convertView = View.inflate(MainActivity.this,
                        R.layout.list_item, null);
                holder = new ViewHolder();
                holder.tv_ctime = (TextView) convertView
                        .findViewById(R.id.tv_ctime);
                holder.tv_title = (TextView) convertView
                        .findViewById(R.id.tv_title);
                holder.tv_description = (TextView) convertView
                        .findViewById(R.id.tv_description);
                holder.tv_url = (TextView) convertView
                        .findViewById(R.id.tv_url);
                holder.iv_picUrl = (ImageView) convertView
                        .findViewById(R.id.iv_picUrl);
                convertView.setTag(holder);
            } else {
                holder = (ViewHolder) convertView.getTag();
            }
            holder.tv_ctime.setText(list.get(position).getCtime());
            holder.tv_title.setText(list.get(position).getTitle());
            holder.tv_description.setText(list.get(position).getDescription());
            holder.tv_url.setText(list.get(position).getUrl());
            ImageLoader.getInstance().displayImage(list.get(position).getPicUrl(), holder.iv_picUrl);
            return convertView;
        }

    }
      //优化帮助类
    private static class ViewHolder {
        TextView tv_ctime, tv_title, tv_description, tv_url;
        ImageView iv_picUrl;
    }
  //异步加载数据的方法
    public void initData() {
        new AsyncTask<String, String, String>() {

            @Override
            protected String doInBackground(String... params) {
                // 调用 方法
                getData();
                return null;
            }

            @Override
            protected void onPostExecute(String result) {
                // 刷新适配器
                adapter.notifyDataSetChanged();
            
                super.onPostExecute(result);
            }
        }.execute();
    }
    //获取网络数据的方法
    public void getData() {
        try {
            URL url = new URL(
                    "https://api.tianapi.com/wxnew/?key=8d6e3228d25298f13af4fc40ce6c9679&num=10&page="
                            + path);
            HttpURLConnection conn = (HttpURLConnection) url.openConnection();
            conn.setConnectTimeout(5000);
            conn.setReadTimeout(5000);
            int code = conn.getResponseCode();
            if (code == 200) {
                //Gson解析
                Gson gson = new Gson();
                JsonData json = gson.fromJson(
                        new InputStreamReader(conn.getInputStream()),
                        JsonData.class);
                //如果fls为true就把json.getNewslist()拼接进去进行加载数据
                //else就走list=json.getNewslist();
                if (flag) {
                    //list.addAll拼接
                    list.addAll(json.getNewslist());
                } else {
                    list=json.getNewslist();
                }
                Log.i("+++++++++++++++++++++++", list+"");
            }
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

}

Layout布局


<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical" >
    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="30dp"
        android:orientation="horizontal"
        >
        <TextView
        android:id="@+id/tv_ctime"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        />
        <TextView
        android:id="@+id/tv_title"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        />
        <TextView
        android:id="@+id/tv_description"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        />
        <TextView
        android:id="@+id/tv_url"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        />
    </LinearLayout>
    <ImageView
        android:id="@+id/iv_picUrl"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        />

</LinearLayout>



资源下载链接为: https://pan.quark.cn/s/3d8e22c21839 随着 Web UI 框架(如 EasyUI、JqueryUI、Ext、DWZ 等)的不断发展与成熟,系统界面的统一化设计逐渐成为可能,同时代码生成器也能够生成符合统一规范的界面。在这种背景下,“代码生成 + 手工合并”的半智能开发模式正逐渐成为新的开发趋势。通过代码生成器,单表数据模型以及一对多数据模型的增删改查功能可以被直接生成并投入使用,这能够有效节省大约 80% 的开发工作量,从而显著提升开发效率。 JEECG(J2EE Code Generation)是一款基于代码生成器的智能开发平台。它引领了一种全新的开发模式,即从在线编码(Online Coding)到代码生成器生成代码,再到手工合并(Merge)的智能开发流程。该平台能够帮助开发者解决 Java 项目中大约 90% 的重复性工作,让开发者可以将更多的精力集中在业务逻辑的实现上。它不仅能够快速提高开发效率,帮助公司节省大量的人力成本,同时也保持了开发的灵活性。 JEECG 的核心宗旨是:对于简单的功能,可以通过在线编码配置来实现;对于复杂的功能,则利用代码生成器生成代码后,再进行手工合并;对于复杂的流程业务,采用表单自定义的方式进行处理,而业务流程则通过工作流来实现,并且可以扩展出任务接口,供开发者编写具体的业务逻辑。通过这种方式,JEECG 实现了流程任务节点和任务接口的灵活配置,既保证了开发的高效性,又兼顾了项目的灵活性和可扩展性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值