Android ListView 事件监听 || 关于ListView选中时显示的效果。
Adapter是用来帮助填充数据的中间桥梁,比如通过它将数据填充到ListView, GridView, Gallery.而android 提供了几种Adapter:ArrayAdapter<T>, BaseAdapter, CursorAdapter, HeaderViewListAdapter, ListAdapter, ResourceCursorAdapter, SimpleAdapter, SimpleCursorAdapter, SpinnerAdapter, WrapperListAdapter.我猜想这些Adapter的区别在于你的数据来源不一样:比如若你的数据来源于一个Arraylist 就使用BaseAdapter,SimpleAdapter,而数据来源于通过查询数据库获得Cursor那就使用SimpleCursorAdapter等。就目前我经常使用的BaseAdapter和SimpleCursorAdapter。
1,BaseAdapter:---数据来源于Arraylist-->MyArraylist
当你继承BaseAdapter客制化你的Adapter时,你必须OverWrite以下函数:
@Override public int getCount() { // TODO Auto-generated method stub System.out.println("the size is\t" + MyArraylist.size()); return MyArraylist.size(); } public View getView(int position, View v, ViewGroup parent) { // TODO Auto-generated method stub View view; if (v == null) { view = mInflater.inflate(R.layout.track_list_item, null); } else { view = v; }} public void changeBg(int position){ isFocused[whichClick==-1?0:whichClick] = false; whichClick = position; isFocused[position] = true; notifyDataSetChanged(); }package com.ui.demo;import java.util.List;import java.util.Map;import android.app.AlertDialog;import android.app.Dialog;import android.content.Context;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.BaseAdapter;import android.widget.Button;import android.widget.TextView;import android.widget.Toast;public class MyArrayAdapter extends BaseAdapter{ private static List<Map<String,String>> list; private LayoutInflater mInflater; private ViewHolder holder; //alertdialog 被选中初始化false private static boolean[] isFocused ; private static int whichClick = -1; Context mContext; public MyArrayAdapter(Context context,List<Map<String,String>> objects){ list = objects; mContext = context; mInflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); isFocused = new boolean[objects.size()]; for(int i=0;i<objects.size();i++){ isFocused[i] = false; } } public int getCount() { return list.size(); } public Object getItem(int position) { return list.get(position); } public long getItemId(int position) { return position; } public void changeBg(int position){ isFocused[whichClick==-1?0:whichClick] = false; whichClick = position; isFocused[position] = true; notifyDataSetChanged(); } public View getView(int position, View convertView, ViewGroup parent) { if (convertView == null) { convertView = mInflater.inflate(R.layout.musiccategories, null); holder = new ViewHolder(); holder.s_Name = (TextView) convertView.findViewById(R.id.s_name); holder.btnTest = (Button) convertView.findViewById(R.id.btnTest); holder.btnTest.setText("Kaden"); holder.btnTest.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Toast.makeText(mContext, "Button clicked.", Toast.LENGTH_SHORT).show(); } }); convertView.setTag(holder); } else { // Get the ViewHolder back to get fast access to the TextView // and the ImageView. holder = (ViewHolder) convertView.getTag(); } convertView.setBackgroundResource(isFocused[position]?R.drawable.btn_down_bg:R.drawable.btn_up_bg); //holder.s_Name.setText(list.get(position).get(WebTools.SON_GEMING)); return convertView; } static class ViewHolder { TextView s_Name; Button btnTest; }}package com.ui.demo;import java.util.ArrayList;import java.util.HashMap;import java.util.List;import java.util.Map;import android.app.Activity;import android.os.Bundle;import android.view.View;import android.widget.AdapterView;import android.widget.ListView;import android.widget.AdapterView.OnItemClickListener;/** * @Title: ListviewTest.java* @Package com.ui.demo* @Description: TODO* @author Kaden Kang E-mail:cumtkangyi@gmail.com* @version Create date: 2010-11-29下午12:10:13* @version V1.0 */public class ListviewTest extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); setContentView(R.layout.my_listview); List<Map<String, String>> listItem = new ArrayList<Map<String, String>>(); Map<String, String> map; map = new HashMap<String, String>(); map.put("ItemTitle", "China"); map.put("ItemInfo", "+86"); listItem.add(map); map = new HashMap<String, String>(); map.put("ItemTitle", "Iran"); map.put("ItemInfo", "+98"); listItem.add(map); map = new HashMap<String, String>(); map.put("ItemTitle", "Iraq"); map.put("ItemInfo", "+964"); listItem.add(map); map = new HashMap<String, String>(); map.put("ItemTitle", "Ireland"); map.put("ItemInfo", "+353"); listItem.add(map); map = new HashMap<String, String>(); map.put("ItemTitle", "Israel"); map.put("ItemInfo", "+972"); listItem.add(map); map = new HashMap<String, String>(); map.put("ItemTitle", "American"); map.put("ItemInfo", "+001"); listItem.add(map); ListView listView = (ListView)findViewById(R.id.mListView); final MyArrayAdapter adapter = new MyArrayAdapter(this, listItem); listView.setAdapter(adapter); listView.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) { adapter.changeBg(arg2); } }); }}