Android学习之ListView控件

来源:互联网 发布:mac搜狗 工具箱 编辑:程序博客网 时间:2024/04/27 13:10

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







0 0