本文共 5131 字,大约阅读时间需要 17 分钟。
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 Listdata; private List 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 (); gridViewData = new ArrayList (); 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 data; /*** * listview item position==2 * * GridView里面的数据 * */ private List gridViewData; private GridViewAdapter gridViewAdapter; /** ListView 的数据 **/ public void setData(List data) { this.data = data; this.notifyDataSetChanged(); } /*** gridView的数据 **/ public void setGridViewData(List 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(); } };}
原文链接:,转发请注明来源!
备份下载地址:
转载地址:http://iibgx.baihongyu.com/