Android学习之ListView控件

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);
    }
    
	@Override
	public int getCount() 
	{
		//返回行数
		return 23;
	}

	@Override
	public Object getItem(int arg0) {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public long getItemId(int arg0) {
		// TODO Auto-generated method stub
		return 0;
	}

	@Override
	public View getView(int arg0, View arg1, ViewGroup arg2) {
		// TODO Auto-generated method stub
		
		if (arg1 == null)
		{
			//将XML绘制成view
			arg1 = 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;
	
	@Override
	protected void onCreate(Bundle savedInstanceState)
	{
		// TODO Auto-generated method stub
		super.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() {

			@Override
			public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
					long arg3)
			{
				// TODO Auto-generated method stub
				Log.v( Integer.toString(arg2), "onclick()");
			}
		});
		
	}

}







评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值