Android适配器总结

1、ArrayAdapter

实现代码;

public class MainActivity extends Activity {
	
	private ListView listAdapter;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		initView();
	}
	private void initView(){
		listAdapter = (ListView) findViewById(R.id.list_adapter);
		ArrayAdapter<String> adapter = new ArrayAdapter<String>(getApplicationContext(),R.layout.list ,new String[]{"音乐","电影","足球"});
		
		listAdapter.setAdapter(adapter);
	}

}
在xml文件中方textView 用来显示数组的内容
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/name"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    />
运行效果


需要注意的是当自己写一个list.xml文件来存放数组中的内容时TextView应为最外层控件(即TextView不能放在任何Layout控件里面)否则报错you must support a resource ID for a TextView 报错如下:

当然你也可以不写含(用来显示)TextView的.xml文件只要将

ArrayAdapter<String> adapter = new ArrayAdapter<String>(getApplicationContext(),R.layout.list ,new String[]{"音乐","电影","足球"});改成
ArrayAdapter<String> adapter = new ArrayAdapter<String>(getApplicationContext(),
<span style="white-space:pre">				</span>android.R.layout.simple_list_item_1,new String[]{"音乐","电影","足球"});
</pre><pre name="code" class="java">使用Android自导的组件即可

2、SimpleAdapter

首先在主界面放一个listview组件.xml

  <ListView
        android:id="@+id/list_adapter"
        android:layout_width="match_parent"
        android:layout_height="wrap_content" >
    </ListView>
在准备一个xml文件设计界面的格式.xml
<?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="horizontal" >

    <TextView
        android:id="@+id/name"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
         />

    <TextView
        android:id="@+id/role"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
      />

    <TextView
        android:id="@+id/team"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        />

</LinearLayout>
将适配器与xml结合起来
public class SimpleAdapterActivity extends Activity {

	private ListView listView ;
	private String [] keys = new String []{"name","role","team"};
	private int [] IDs = new int[]{R.id.name,R.id.role,R.id.team};
	private List<HashMap<String, String>>list;
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		// TODO Auto-generated method stub
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
		initView();
	}
	private void initView(){
		
		listView = (ListView)findViewById(R.id.list_adapter);
		list = new ArrayList<HashMap<String,String>>();
		HashMap<String, String> map = new HashMap<String, String>();
		map.put("name", "小罗");
		map.put("role", "足球");
		map.put("team", "巴萨罗那");
		list.add(map);
		HashMap<String, String> map2 = new HashMap<String, String>();
		map2.put("name", "乔丹");
		map2.put("role", "篮球");
		map2.put("team", "公牛");
		list.add(map2);
		SimpleAdapter adapter = new SimpleAdapter(getApplicationContext(), list, R.layout.list, keys, IDs);
		listView.setAdapter(adapter);
	}
	
}
运行效果 界面貌似太难看了,另外GraidView也可以使用SimpleAdapter达到九宫格的效果



3、通过继承适配器类自定义适配器

其实原理都一样,就像ExpandableListView组件在运用的使用其需要自定义适配器  具体参考:

http://blog.csdn.net/wenzhenyu1990/article/details/14434407


自定义适配器常见的一种extends BaseAdapter 的  比如一个listView 点击item时惊醒修改,点击按钮时实现删除,这时需要自定义一个extends BaseAdapter的适配器这样的,并且将listView 的descendantFocusability设置为blocksDescendants 同事将Button的focusable设置为false。  具体代码有时间补上。




基于BaseAdapter 自定义的Adapter

class UsersShowAdapter extends BaseAdapter{
		private ViewHolder holder = new ViewHolder();
		private List<HashMap<String, String>> datas;
		private Context context;
		private LayoutInflater inflater;
		public UsersShowAdapter(Context context,List<HashMap<String, String>> datas) {
			this.context = context;
			inflater = LayoutInflater.from(context);
			this.datas = datas;
		}
		@Override
		public int getCount() {
			return datas.size();
		}
		@Override
		public Object getItem(int position) {
			return datas.get(position);
		}
		@Override
		public long getItemId(int position) {
			return position;
		}
		@Override
		public View getView(int position, View convertView, ViewGroup group) {
			if(convertView==null){
				convertView = inflater.inflate(R.layout.app_list_item, null);
				holder.accountView = (TextView) convertView.findViewById(R.id.item_account);
				holder.genderView = (TextView)convertView.findViewById(R.id.item_gender);
				holder.del = (Button)convertView.findViewById(R.id.item_del);
				holder.del.setOnClickListener(new OnClickListener() {
					@Override
					public void onClick(View view) {
						Toast.makeText(getApplicationContext(), "del", Toast.LENGTH_LONG).show();
					}
				});
				holder.update=(Button)convertView.findViewById(R.id.item_update);
				holder.update.setOnClickListener(new OnClickListener() {
					@Override
					public void onClick(View view) {
						Toast.makeText(getApplicationContext(), "update", Toast.LENGTH_LONG).show();
					}
				});
				convertView.setTag(holder);
			}else {
				holder = (ViewHolder) convertView.getTag();
			}
				holder.accountView.setText(datas.get(position).get(Data.ACCOUNT));
				holder.genderView.setText(datas.get(position).get(Data.GENDER));
				holder.del.setText("del");
				holder.update.setText("update");
			return convertView;
		}
	}



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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值