Android进阶高手(二)适配器(Adapter)那是必须的

       在Android应用开发过程中,适配器(Adapter)可是大有可为,尤其是在显示数据、读取数据库用列表显示更是使用频繁。但是今天我们要说的不是读取数据库中的信息,而是自己来添加一行数据让它显示在列表顶层。实现的功能有添加数据和删除数据两项。废话不多说,代码赶紧的!

首先先看下运行效果如下所示:

     

                                 图一                                                                                 图二

   

                                  图三                                                                                   图四

 

以上四张图演示了添加一行数据到列表中的功能,至于删除数据在这里就不演示了,留给童靴们去做。

开始介绍工程项目了,步骤如下:

1、新建项目命名为List

2、编写一个Bean封装其属性,命名为Item.java,代码如下:

package com.wyf.wpf;

import java.text.SimpleDateFormat;
import java.util.Date;

public class Item {
	
	String task;
	Date created;

	public String getTask() {
	return task;
	}

	public Date getCreated() {
	return created;
	}

	public Item(String _task) {
	this(_task, new Date(java.lang.System.currentTimeMillis()));
	}

	public Item(String _task, Date _created) {
	task = _task;
	created = _created;
	}
	
	@Override
	public String toString() {
	SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yy");
	String dateString = sdf.format(created);
	return "(" + dateString + ")" + task;
	}
}


3、编写三个布局

(1)、main.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="vertical" >
    
    <ListView 
        android:id="@+id/myListView"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"/>

</LinearLayout>

 

(2)、item.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">
    <TextView
        android:id="@+id/row"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:padding="5px"
        android:gravity="center"
        />
    <TextView
        android:id="@+id/rowDate"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:gravity="center"
        android:padding="5px"
        />
</LinearLayout>

(3)、add.xml:用于弹出对话框提示添加数据的布局

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" 
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">
    <EditText 
        android:id="@+id/add"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        />

</LinearLayout>

4、自定义自己的Adapter,命名为MyAdapter.java,代码如下:

package com.wyf.wpf;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;


import android.content.Context;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView;

public class MyAdapter extends BaseAdapter{
	
	private LayoutInflater mInflater;
	private List<Item> items;
	
	public MyAdapter(Context context,List<Item> items){
		this.items=items;
		mInflater=(LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
	}

	@Override
	public int getCount() {
		// TODO Auto-generated method stub
		return items.size();
	}

	@Override
	public Object getItem(int position) {
		// TODO Auto-generated method stub
		if(items==null)
		{
			return null;
		}
		else
		{
			return items.get(position);
		}
	}

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

	@Override
	public View getView(int position, View convertView, ViewGroup parent) {
		// TODO Auto-generated method stub
		Item item=(Item) getItem(position);
		String nameString=item.getTask().toString();
		Date date=item.getCreated();
		SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yy");
        String dateString = sdf.format(date);
		ViewHolder holder;
		if(convertView==null){
			holder=new ViewHolder();
			convertView=mInflater.inflate(R.layout.item,null);
			holder.nameText=(TextView)convertView.findViewById(R.id.row);
			holder.dateText=(TextView)convertView.findViewById(R.id.rowDate);
			convertView.setTag(holder);
		}
		else{
		    holder = (ViewHolder) convertView.getTag();
		}
		holder.nameText.setText(nameString);
		Log.i("TAG","nameString---->"+nameString);
		Log.i("TAG","holder.name---->"+holder.nameText);
		holder.dateText.setText(dateString);
		return convertView;
	}
	
	class ViewHolder{
		TextView nameText;
		TextView dateText;
	}

}

5、编写Activity,这里就不解释了,直接上代码:

package com.wyf.wpf;

import java.util.ArrayList;

import android.app.Activity;
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.DialogInterface.OnClickListener;
import android.os.Bundle;
import android.view.KeyEvent;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.EditText;
import android.widget.ListView;

public class ListActivity extends Activity{
	private ArrayList<Item> Items;
	private ListView myListView;
	private MyAdapter adapter;
	private String[] str={"添加组","删除组"};

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        myListView = (ListView)findViewById(R.id.myListView);
        Items = new ArrayList<Item>();
        for(int i=0;i<10;i++){
        	Item item=new Item("我是"+i);
        	Items.add(item);
        }
        adapter=new MyAdapter(this,Items);
        myListView.setAdapter(adapter);
        myListView.setOnItemClickListener(new OnItemClickListener() {

			@Override
			public void onItemClick(AdapterView<?> arg0, View arg1, final int position,
					long arg3) {
				// TODO Auto-generated method stub
				new AlertDialog.Builder(ListActivity.this)
				.setItems(str, new DialogInterface.OnClickListener() {
					
					@Override
					public void onClick(DialogInterface dialog, int which) {
						// TODO Auto-generated method stub
						switch(which){
						case 0:
							LayoutInflater mInflater=(LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
							final View view=mInflater.inflate(R.layout.add,null);
							new AlertDialog.Builder(ListActivity.this)
							.setView(view)
							.setTitle("添加")
							.setPositiveButton("添加",new OnClickListener() {
								
								@Override
								public void onClick(DialogInterface dialog, int which) {
									// TODO Auto-generated method stub
									EditText add=(EditText)view.findViewById(R.id.add);
									String str=add.getText().toString();
									updateAdapter(str);
									dialog.dismiss();
								}
							})
							.setNegativeButton("取消",new OnClickListener() {
								
								@Override
								public void onClick(DialogInterface dialog, int which) {
									// TODO Auto-generated method stub
									dialog.dismiss();
								}
							}).show();
							break;
						case 1:
							Items.remove(position);
							adapter.notifyDataSetChanged();
							dialog.dismiss();
							break;
						}
					}
				}).show();
			}
		});
   }
    //更新adapter函数
	public void updateAdapter(String str){
		Item newItem;
        newItem = new Item(str);
        Items.add(0, newItem);
        adapter.notifyDataSetChanged();
	}
}

上面的代码一般都不难,在这里就没必要详解了,只是需要注意一点,我没要刷新列表数据,就的使用adapter.notifyDataSetChanged();来更新。

今天就到此了,下班!哈哈!

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值