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()");}});}}







更多相关文章

  1. 一款常用的 Squid 日志分析工具
  2. GitHub 标星 8K+!一款开源替代 ls 的工具你值得拥有!
  3. RHEL 6 下 DHCP+TFTP+FTP+PXE+Kickstart 实现无人值守安装
  4. Linux 环境下实战 Rsync 备份工具及配置 rsync+inotify 实时同步
  5. Android中preference的使用
  6. NDK编程入门
  7. 【Android】_音乐列表_仿网易云音乐播放器2(读取本地mp3)
  8. 手把手教你在CTS中编写自己的测试模块
  9. Android如何集成Vitamio

随机推荐

  1. Android序列化基础知识
  2. Android构建打包过程
  3. android merge和include简单使用
  4. Android中Activity启动模式launchermode
  5. Android中文API(136) —— GeoCoder
  6. 三个博客和一张关系图,掌握Android WebVie
  7. xml中设置圆角矩形框
  8. Android中重复执行动画bug
  9. 编程之路-客户端学习知识点纲要(Web/iOS/A
  10. android3.2以上切屏禁止onCreate()