zoukankan      html  css  js  c++  java
  • ScrollView嵌套ListView嵌套GridView的上下拉以及加载更多

    ScrollView 效果

    ScrollView嵌套ListView嵌套GridView的上下拉以及加载更多
    ScrollView 说明

    一个ScrollView 嵌套ListView 嵌套GridView的上拉加载更多,下拉刷新的demo。
    主要是重写了GridView和LsitView中的onMeasure 方法。
    写的比较简单,希望对初学者有帮助。
    /***
    * 主要思路是
    * ScrollView 嵌套ListView 嵌套GridView的上拉加载更多,下拉刷新。
    * 
    * 逻辑在适配器做了处理
    * 
    * 我们只让ListView加载2个数据Item,第一个是item对象,第二个是一个对象
    * 
    */
    public class MainActivity extends Activity implements OnHeaderRefreshListener,
                    OnFooterRefreshListener {
     
            MyAdapter myAdapter;
            // 自定义的GridView的上下拉动刷新
            private PullToRefreshView mPullToRefreshView;
            private MyListView listView;
            private List<Integer> data;
            private List<Integer> gridViewData;
     
            @Override
            protected void onCreate(Bundle savedInstanceState) {
                    super.onCreate(savedInstanceState);
                    setContentView(R.layout.activity_main);
                    mPullToRefreshView = (com.example.demo.PullToRefreshView) findViewById(R.id.main_pull_refresh_view);
                    listView = (MyListView) findViewById(R.id.gridView1);
                    myAdapter = new MyAdapter(this);
                    data = new ArrayList<Integer>();
                    gridViewData = new ArrayList<Integer>();
                    for (int i = 0; i < 2; i++) {
                            data.add(i);
                    }
     
                    for (int i = 0; i < 12; i++) {
                            if (i % 2 == 0) {
                                    gridViewData.add(R.drawable.pic1);
                            } else {
                                    gridViewData.add(R.drawable.pic2);
                            }
     
                    }
                    myAdapter.setData(data);
                    myAdapter.setGridViewData(gridViewData);
                    listView.setAdapter(myAdapter);
     
                    mPullToRefreshView.setOnHeaderRefreshListener(this);
                    mPullToRefreshView.setOnFooterRefreshListener(this);
                    mPullToRefreshView.setLastUpdated(new Date().toLocaleString());
            }
     
            @Override
            public void onHeaderRefresh(PullToRefreshView view) {
                    mPullToRefreshView.postDelayed(new Runnable() {
                            @Override
                            public void run() {
                                    mPullToRefreshView.onHeaderRefreshComplete("更新于:"
                                                    + Calendar.getInstance().getTime().toLocaleString());
                                    mPullToRefreshView.onHeaderRefreshComplete();
     
                                    Toast.makeText(MainActivity.this, "数据刷新完成!", 0).show();
                            }
     
                    }, 3000);
     
            }
     
            @Override
            public void onFooterRefresh(PullToRefreshView view) {
                    mPullToRefreshView.postDelayed(new Runnable() {
     
                            @Override
                            public void run() {
                                    mPullToRefreshView.onFooterRefreshComplete();
                                    gridViewData.add(R.drawable.pic1);
                                    myAdapter.setGridViewData(gridViewData);
                                    Toast.makeText(MainActivity.this, "加载更多数据!", 0).show();
                            }
     
                    }, 3000);
     
            }
     
     
     
    /**
    * 
    * lsitView的适配器
    * 
    * @author lyy
    * 
    */
    public class MyAdapter extends BaseAdapter {
            Context context;
            private List<Integer> data;
     
            /***
             * listview item position==2
             * 
             * GridView里面的数据
             * 
             */
            private List<Integer> gridViewData;
            private GridViewAdapter gridViewAdapter;
     
            /** ListView 的数据 **/
            public void setData(List<Integer> data) {
                    this.data = data;
                    this.notifyDataSetChanged();
            }
     
            /*** gridView的数据 **/
     
            public void setGridViewData(List<Integer> gridViewData) {
                    this.gridViewData = gridViewData;
     
                    this.notifyDataSetChanged();
     
            }
     
            public MyAdapter(Context context) {
                    this.context = context;
     
            }
     
            @Override
            public int getCount() {
                    // TODO Auto-generated method stub
                    return 2;
            }
     
            @Override
            public Object getItem(int position) {
                    // TODO Auto-generated method stub
                    return data.get(position);
            }
     
            @Override
            public long getItemId(int position) {
                    // TODO Auto-generated method stub
                    return position;
            }
     
            @Override
            public View getView(int position, View convertView, ViewGroup parent) {
     
                    if (position == 0) {
     
                            return listView();
                    } else {
     
                            return gridView();
                    }
     
            }
     
            public View listView() {
                    View view = null;
                    if (view == null) {
                            view = LayoutInflater.from(context).inflate(R.layout.item, null);
                    }
     
                    ImageView imageView1 = (ImageView) view.findViewById(R.id.imageView1);
                    return view;
            }
     
            public View gridView() {
     
                    View view = LayoutInflater.from(context).inflate(R.layout.item1, null);
                    GridView myGridView = (GridView) view.findViewById(R.id.gridView1);
     
                    if (gridViewAdapter == null)
                            gridViewAdapter = new GridViewAdapter(context);
     
                    gridViewAdapter.setData(gridViewData);
                    myGridView.setAdapter(gridViewAdapter);
     
                    myGridView.setOnItemClickListener(onItemClickListener);
                    return view;
            }
     
            private OnItemClickListener onItemClickListener = new OnItemClickListener() {
     
                    @Override
                    public void onItemClick(AdapterView<?> arg0, View arg1, int position,
                                    long arg3) {
                            Toast.makeText(context, "你点击的是:" + position, 0).show();
     
                    }
     
            };
    }

    ScrollView下载

     http://yunpan.cn/cAF8SgMWUAXrP  提取码 917c
  • 相关阅读:
    web 单例 多例
    python socket客户端
    foy: 轻量级的基于 nodejs 的通用 build 工具
    Hydux: 一个 Elm-like 的 全功能的 Redux 替代品
    AlarmManager使用注意事项
    【转】android ListView 几个重要属性
    自己写的小工具软件集合
    win8.1 cygwin编译java轻量虚拟机avian
    android 图片缩放抗锯齿
    windows phone和android,ios的touch事件兼容
  • 原文地址:https://www.cnblogs.com/zhujiabin/p/5803373.html
Copyright © 2011-2022 走看看