Android学习之ListView控件
16lz
2021-01-25
ios学习了这么长时间,再学习android(和我之前学习C#转ios感觉一样)总想的是:在ios是这么做的,那么在android里面是不是有类似的做法呢?答案肯定是:有!
我说一说我学习android控件listview(和UITableview差不多的一个表控件)。
先说思路:
a.是不是有类似xib让我可以自定每个cell(ios)?有,叫做item 对应是XML,其实xib也是可以用xml编辑的。
b.是不是有类似UITableView的回调方法?有,叫做适配器(其实是ios的delegate对应android或是java中接口或抽象类)。
1).返回行
2).返回每个item/cell
3).给每一行添加单击事件
4).获取每一行里面的控件赋值
5).如何将item的xml映射(或者叫绘制)成view
其实一对比结果发现它们有太多的相似了。看看实现过程:
表的样式:
1.穿件一个Android项目(过程省略了)。
2.在activity_main.xml中添加listview :
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <ListView android:id="@+id/listView" android:layout_width="match_parent" android:layout_height="wrap_content" ></ListView></LinearLayout>
3.在layout中添加一个item的xml布局文件(名字为:item_xml.xml):
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="horizontal" > <ImageView android:id="@+id/img" android:layout_width="71dp" android:layout_height="71dp" android:src="@drawable/ic_launcher" /> <LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="vertical" > <TextView android:id="@+id/title" android:layout_width="242dp" android:layout_height="wrap_content" android:text="222" android:textAppearance="?android:attr/textAppearanceMedium" /> <TextView android:id="@+id/info" android:layout_width="match_parent" android:layout_height="47dp" android:text="11" /> </LinearLayout> </LinearLayout>
上面三步完成,工作已经完成一半,下面就需要完成,如何把item的xml文件在listview中显示。
用ios的说法,需要给表制定数据源和代理返回cell。
4.添加一个单独的java类extended baseadapter(单独在建一个java的package),同时实现它的几个代理方法(名字为ListAdapter.java):
package com.example.adapter;import com.example.hello.R;import android.content.Context;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.BaseAdapter;public class ListAdapter extends BaseAdapter{ Context myContext; LayoutInflater myInflater; public ListAdapter(Context context) { this.myContext = context; this.myInflater = LayoutInflater.from(context); } @Overridepublic int getCount() {//返回行数return 23;}@Overridepublic Object getItem(int arg0) {// TODO Auto-generated method stubreturn null;}@Overridepublic long getItemId(int arg0) {// TODO Auto-generated method stubreturn 0;}@Overridepublic View getView(int arg0, View arg1, ViewGroup arg2) {// TODO Auto-generated method stubif (arg1 == null){//将XML绘制成viewarg1 = this.myInflater.inflate(R.layout.item_xml, null);}return arg1;}
好了,适配器也写完了,这里把表的行数,返回每个行的view都完成了。
5.把上面的4步综合整理,让这个表显示出来在activity中的java文件中写下:
package com.example.hello;import com.example.adapter.ListAdapter;import android.app.Activity;import android.os.Bundle;import android.util.Log;import android.view.View;import android.widget.AdapterView;import android.widget.AdapterView.OnItemClickListener;import android.widget.ListView;public class ThreeActivity extends Activity{ListView myListView;ListAdapter myAdapter;@Overrideprotected void onCreate(Bundle savedInstanceState){// TODO Auto-generated method stubsuper.onCreate(savedInstanceState);setContentView(R.layout.third_activity); //适配器myAdapter = new ListAdapter(this);myListView = (ListView) findViewById(R.id.listView);myListView.setAdapter(myAdapter);//给每个item添加一个单击事件myListView.setOnItemClickListener(new OnItemClickListener() {@Overridepublic void onItemClick(AdapterView<?> arg0, View arg1, int arg2,long arg3){// TODO Auto-generated method stubLog.v( Integer.toString(arg2), "onclick()");}});}}
更多相关文章
- 一款常用的 Squid 日志分析工具
- GitHub 标星 8K+!一款开源替代 ls 的工具你值得拥有!
- RHEL 6 下 DHCP+TFTP+FTP+PXE+Kickstart 实现无人值守安装
- Linux 环境下实战 Rsync 备份工具及配置 rsync+inotify 实时同步
- Android中preference的使用
- NDK编程入门
- 【Android】_音乐列表_仿网易云音乐播放器2(读取本地mp3)
- 手把手教你在CTS中编写自己的测试模块
- Android如何集成Vitamio