ListView 动态加载
2016-01-07 14:17
232 查看
第一次写,markdown完全不会用呀,还有就是会不会有潜规则的,真不知道写完了会是啥样,想想还有点小激动呢。不过一回生二回熟嘛,万事开头难,老鸟们见笑了!
这是一篇动态加载ListView的学习日记,小弟也是边学习边工作边加班…具体的介绍就是:提供一个下拉选,选择完数量以后,ListView加载出来。
接下来还是上代码;
适配器
items视图
listview的xml
items 的xml
下拉选adapter设置样式的xml
这里还顺带解决了一下Listview和scrollview不能共同的问题,在代码里解释了。只是一种解决方案,我转载的,但忘了当时从哪给搞的了,然后改了改。
这是demo:http://download.csdn.net/detail/shuai_de_yi_ta_hu_tu/9394369
第一次写,写的不好,见笑了见笑了。
这是一篇动态加载ListView的学习日记,小弟也是边学习边工作边加班…具体的介绍就是:提供一个下拉选,选择完数量以后,ListView加载出来。
接下来还是上代码;
public class MainActivity extends Activity { private Context cont = MainActivity.this; private Spinner mySpinner = null;// 下拉选 private ListView myListView = null; ArrayAdapter<String> _AdapterMyspinner = null; private String[] list_num = new String[] { "请选择加载的数量", "不加载", "1", "2", "3", "4", "5", "6", "7", "8", "9", "10" };// 定义一个数组,用于模拟获取的信息条数 private List<String> list = new ArrayList<String>(); private MyAdapter adapter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_list_main); Init(); } public void Init() { mySpinner = (Spinner) findViewById(R.id.myspinner); myListView = (ListView) findViewById(R.id.mylistview); // 将数组放在adapter中,并设置样式 _AdapterMyspinner = new ArrayAdapter<String>(cont, R.layout.spinner_layout, list_num); // 为spinner设置背景 mySpinner.setBackgroundResource(R.drawable.chooser_line1); // 为spinner设置下拉样式 _AdapterMyspinner .setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); mySpinner.setAdapter(_AdapterMyspinner); // 为spinner设置监听 mySpinner.setOnItemSelectedListener(new OnItemSelectedListener() { public void onItemSelected(AdapterView<?> parent, View v, int position, long id) { if ("请选择加载的数量".equals(list_num[position])) { myListView.setVisibility(View.GONE); } else if ("不加载".equals(list_num[position])) { list.clear(); // 加载listview setListViewHeightBasedOnChildren(myListView); } else { myListView.setVisibility(View.VISIBLE); list.clear(); int sl = Integer.parseInt(list_num[position]); for (int i = 0; i < sl; i++) { list.add(i + ""); System.out.println(i); } // 加载listview setListViewHeightBasedOnChildren(myListView); } } @Override public void onNothingSelected(AdapterView<?> arg0) { } }); } // 加载listview public void setListViewHeightBasedOnChildren(ListView listView) { adapter = new MyAdapter(cont); adapter.setDataSource(list); listView.setAdapter(adapter); /** * 为了解决listview与ScrollView不能同时使用的问题,提供以下解决方法.我没有用到scrollview,不使用也没问题. * 原理:调整ListView高度 思路就是在设置完ListView的Adapter后,根据ListView的子项目重新计算ListView的高度, * 然后把高度再作为LayoutParams设置给ListView,这样它的高度就正确了 * 注意:在MyItemsView中,视图必须继承LineraLayout,不然会空指针,只有LinearLyout重写了onMeasure方法. * 如果直接在Adapter中加载view视图,xml视图中,需要以LineraLayout开始,不然也会报空指针. */ ListAdapter listAdapter = listView.getAdapter(); if (listAdapter == null) { return; } int totalHeight = 0; for (int i = 0; i < listAdapter.getCount(); i++) { View listItem = listAdapter.getView(i, null, listView); listItem.measure(0, 0); totalHeight += listItem.getMeasuredHeight(); } ViewGroup.LayoutParams params = listView.getLayoutParams(); params.height = totalHeight + (listView.getDividerHeight() * (listAdapter.getCount() - 1)); } }
适配器
public class MyAdapter extends BaseAdapter { private Context context; List<String> infolist = null; public MyAdapter(Context context) { this.context = context; infolist = new ArrayList<String>(); } public void setDataSource(List<String> infolist) { if (infolist == null) { this.infolist = new ArrayList<String>(); } else { this.infolist = infolist; } this.notifyDataSetChanged(); } public int getCount() { return infolist.size(); } public Object getItem(int position) { return infolist.get(position); } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { String info = infolist.get(position); System.out.println("info=======" + info); MyItemsView view = null; if (convertView == null) { view = new MyItemsView(context, position); convertView = view; } else { view = (MyItemsView) convertView; } return view; } }
items视图
public class MyItemsView extends LinearLayout { int position = 0; OnClickListener listener; public MyItemsView(Context context, int position) { super(context); this.position = position; initilize(context); } public static EditText text; public void initilize(Context context) { View rootView = LayoutInflater.from(context).inflate( R.layout.activity_items_main, null); addView(rootView); text = (EditText) rootView.findViewById(R.id.items_text); text.setTag(position); text.setOnClickListener(new OnClickListener() { public void onClick(View arg0) { } }); } }
listview的xml
<ListView android:id="@+id/mylistview" android:layout_width="fill_parent" android:layout_height="match_parent" android:layout_below="@+id/myspinner" android:layout_marginBottom="5dp" android:layout_marginLeft="10dp" android:layout_marginRight="10dp" android:layout_marginTop="10dp" android:background="@color/white_gray" android:cacheColorHint="#00000000" android:divider="@color/white" android:dividerHeight="10dp" android:fadingEdge="none" android:focusable="true" android:listSelector="#00000000" android:scrollbars="none" />
items 的xml
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="wrap_content" android:background="@drawable/shape" android:padding="3dp" > <!-- android:descendantFocusability="blocksDescendants" 子控件不影响父控件获取焦点 --> <EditText android:id="@+id/items_text" android:layout_width="fill_parent" android:layout_height="wrap_content" android:hint="请填写内容" android:textColor="@color/black" android:textSize="19sp" /> </RelativeLayout>
下拉选adapter设置样式的xml
<?xml version="1.0" encoding="utf-8"?> <TextView xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content" android:textSize="18sp" android:textColor="@color/black" android:ellipsize="marquee" android:gravity="center" />
这里还顺带解决了一下Listview和scrollview不能共同的问题,在代码里解释了。只是一种解决方案,我转载的,但忘了当时从哪给搞的了,然后改了改。
这是demo:http://download.csdn.net/detail/shuai_de_yi_ta_hu_tu/9394369
第一次写,写的不好,见笑了见笑了。
相关文章推荐
- Android使用webService
- Linux 线程操作函数技能总结
- LocalActivityManager类:为什么Activity的onResume不被执行
- Android下DLNA开发简介
- 12 个非常实用的 jQuery 代码片段
- java下载时中文乱码的处理
- 32位类型(int、long等)右移(>>)32位
- Android Studio 中 Gradle设置代理
- 错误名称:Uncaught SyntaxError: Unexpected token <
- redis memcached mongodb ,couchbase, couchdb,memcache ,HDInsight,documentdb,Greenplum,Nosql,
- 线性判别分析(LDA)准则:FIsher准则、感知机准则、最小二乘(最小均方误差)准则
- 程序员:如何像后端一样写前端代码?
- SQLite指南(5) - PRAGMA命令用法(完整)
- StrictMode介绍
- How To Hide A Processes From Other Users In Linux
- Understanding and Diagnosing ORA-00600 [12333] / ORA-3137 [12333] Errors (文档 ID 389713.1)
- ios FMDB数据库
- linux入侵检测
- Delphi内嵌汇编语言BASM精要(转帖)
- tools:context的作用