ScrollView 效果

ScrollView 说明


一个ScrollView 嵌套ListView 嵌套GridView的上拉加载更多,下拉刷新的demo。
主要是重写了GridView和LsitView中的onMeasure 方法。
写的比较简单,希望对初学者有帮助。


[java]  view plain copy



/*** 
* 主要思路是 
* 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下载