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