ListView用来显示一个列表的控件,在开发中经常用到,介绍一下常用的ListView的用法:
根据列表的适配器类型,列表分为三种,ArrayAdapter,SimpleAdapter和 自定义Adapter(BaseAdapter):
1:ArrayAdapter 最简单的一种用法,通常用来展示单一的字符数据
public class MainActivity extends AppCompatActivity implements AdapterView.OnItemClickListener { private ListView listView; private String[] data = new String[] { "java", "Android","C++", "JavaScript", "Php", "JSP" }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate (savedInstanceState); setContentView (R.layout.activity_main); listView = (ListView) findViewById (R.id.listview); // 数据适配器的定义 (ArrayAdapter) ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,data); // 给ListView设置数据适配器 listView.setAdapter(adapter); // 设置ListView的元素被选中时的事件处理监听器 listView.setOnItemClickListener(this); } @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { // 获取点击ListView item中的内容信息 String text = listView.getItemAtPosition (position)+" "; Log.i ("TAG","position ="+position+"=text="+text); }
2. simpleAdapter的扩展性最好,可以定义各种各样的布局出来
public class MainActivity extends AppCompatActivity implements AdapterView.OnItemClickListener { private ListView listView; private List<Map<String,Object>> mListData; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate (savedInstanceState); setContentView (R.layout.activity_main); mListData = new ArrayList<Map<String, Object>>(); listView = (ListView) findViewById (R.id.listview); // 数据适配器的定义 (simpleAdapter)(各参数名称,英文好的可以查看源码说明) /* context 上下文 * data 数据源 一个map数据组成的list数据集合 * 每一个map都对应listview中的一行数据 * map中每一行的数据,应该包括from中指定的所有条目 * resource 布局文件ID * from list数据中map的键名称 * to 要显示的视图列在“form”中的参数,即绑定视图中的ID名称 */ // 给ListView设置数据适配器 SimpleAdapter adapter = new SimpleAdapter(this,getDate(),R.layout.item, new String[]{"pic","name"},new int[]{R.id.pic,R.id.name} ); listView.setAdapter(adapter); // 设置ListView的元素被选中时的事件处理监听器 listView.setOnItemClickListener(this); } @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { // 获取点击ListView item中的内容信息 String text = listView.getItemAtPosition (position)+" "; Log.i ("TAG","position ="+position+"=text="+text); } public List<Map<String,Object>> getDate() { for (int i = 0; i < 10; i++) { Map<String,Object> map = new HashMap<String,Object> (); map.put ("pic",R.drawable.ic_launcher); map.put ("name", "Text"+i); mListData.add (map); } return mListData; } }
3,自定义适配器(继承BaseAdapter)
public class MainActivity extends AppCompatActivity implements AdapterView.OnItemClickListener { private ListView listView; private List<BookBean> mListData; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate (savedInstanceState); setContentView (R.layout.activity_main); mListData = new ArrayList<BookBean>(); listView = (ListView) findViewById (R.id.listview); // 给ListView设置数据适配器 ListAdapter adapter = new ListAdapter(getDate(),this); listView.setAdapter(adapter); // 设置ListView的元素被选中时的事件处理监听器 listView.setOnItemClickListener(this); } @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { // 获取点击ListView item中的内容信息 String text = listView.getItemAtPosition (position)+" "; Log.i ("TAG","position ="+position+"=text="+text); } public List<BookBean> getDate() { for (int i = 0; i < 10; i++) { BookBean bean = new BookBean (); bean.bookName = "Java"+i; bean.bookContext = "Java 开发第一版"+i; mListData.add (bean); } return mListData; } }
适配器(Adapter):
public class ListAdapter extends BaseAdapter{ List <BookBean> mList; public LayoutInflater minflater; public ListAdapter(List<BookBean> mList, Context context) { this.mList = mList; minflater = LayoutInflater.from (context); } @Override public int getCount() { return mList.size (); } @Override public Object getItem(int position) { return mList.get(position); } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { ViewHolder viewHolder; if (convertView== null){ viewHolder = new ViewHolder (); convertView = minflater.inflate (R.layout.item,null); viewHolder.imageView = (ImageView) convertView.findViewById (R.id.pic); viewHolder.bookNmae = (TextView) convertView.findViewById (R.id.bookname); viewHolder.bookContext = (TextView) convertView.findViewById (R.id.bookcontext); convertView.setTag (viewHolder); }else{ viewHolder = (ViewHolder) convertView.getTag (); } viewHolder.imageView.setImageResource (R.drawable.ic_launcher); viewHolder.bookNmae.setText (mList.get (position).bookName); viewHolder.bookContext.setText (mList.get (position).bookContext); return convertView; } class ViewHolder{ public ImageView imageView; public TextView bookNmae; public TextView bookContext; } }
Bean对象:
public class BookBean { public String bookName; public String bookContext; }