属性 | 描述 |
---|---|
fastScrollEnabled | 是否显示滚动条 |
divider | 设置每一个Item之间的颜色分割条,也能够是drawable |
dividerHeight | 设置分割条高度 |
stackFromBottom | 列表从底部开始显示 |
添加、移除 HeaderView 和 FooterViewjava
- addHeaderView(View v):添加headView(表头),括号中的参数是一个View对象
- addFooterView(View v):添加footerView(表尾),括号中的参数是一个View对象
注意:addHeaderViewView方法必须放在listview.setAdapter()前面,不然会报错
代码:android
final Button btnTest1=new Button(this); btnTest1.setText("Button1"); Button btnTest2=new Button(this); btnTest2.setText("Button2"); listView.addHeaderView(btnTest1); //添加 listView.addFooterView(btnTest2); btnTest1.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { listView.removeHeaderView(btnTest1); //移除 } });
android:listSelector="@android:color/transparent"
缓存
android:divider="@null"
ide
// ListView ArrayAdapter 简单样式数据源绑定 // 1.声明数据源 final String[] datas={"Item1","Item2","Item3","Item4","Item5", "Item6","Item7","Item8","Item9","Item10","Item11","Item12"}; ArrayAdapter<String> adapter=new ArrayAdapter<String>(this, android.R.layout.simple_list_item_checked,datas); /* 系统体统样式: 文本样式: simple_list_item_1 带对号的选中项: simple_list_item_checked RadioButton样式: simple_list_item_single_choice CheckBox 样式:simple_list_item_multiple_choice 选中后背景色修改的样式:simple_list_item_activated_1 */ // 2.设置数据源 listView.setAdapter(adapter); listView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE); //设置选中模式,单选或多选 // 2.获取选中项文本 long[] selectedItems= listView.getCheckItemIds(); for (int i = 0; i < selectedItems.length; i++) { Toast.makeText(ListViewActivity.this, datas[(int) selectedItems[i]], Toast.LENGTH_SHORT).show(); }
// SimpleAdapter List<Map<String,String>> listData=new ArrayList<Map<String,String>>(); Map<String,String> map1=new HashMap<String,String>(); map1.put("Id","1"); map1.put("Name","Mi"); Map<String,String> map2=new HashMap<String,String>(); map2.put("Id","2"); map2.put("Name","HuaWei"); listData.add(map1); listData.add(map2); SimpleAdapter adapter=new SimpleAdapter(getApplicationContext(), listData,R.layout.item_layout, new String[]{"Id","Name"},new int[]{tv_title, tv_content}); lv.setAdapter(adapter);
android:layout_height="match_parent"优化
两种方式: 复用 ConvertView ,ViewHolder 重用组件this
public class MyArrayAdapter extends ArrayAdapter<News> { public MyArrayAdapter(@NonNull Context context, @LayoutRes int resource, @NonNull List<News> objects) { super(context, resource, objects); } @NonNull @Override public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent) { ViewHolder viewHolder; if (convertView == null) { convertView = View.inflate(getContext(), R.layout.item_layout, null); viewHolder = new ViewHolder(); viewHolder.iv = (ImageView) convertView.findViewById(R.id.iv); viewHolder.tv_content = (TextView) convertView.findViewById(R.id.tv_content); viewHolder.tv_title = (TextView) convertView.findViewById(tv_title); convertView.setTag(viewHolder); } else { viewHolder = (ViewHolder) convertView.getTag(); } News news = getItem(position); //赋值 viewHolder.iv.setImageResource(news.getImageId()); viewHolder.tv_title.setText(news.getTitle()); viewHolder.tv_content.setText(news.getContent()); viewHolder.iv.setTag(position); //设置图片的点击事件 viewHolder.iv.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Toast.makeText(MainActivity.this, "Image:" + v.getTag().toString(), Toast.LENGTH_SHORT).show(); } }); //设置 整个 Item的点击事件 convertView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Toast.makeText(MainActivity.this, "Item", Toast.LENGTH_SHORT).show(); } }); return convertView; } /** * 内部类 ViewHolde 用于对控件的实例进行缓存。 * 这样的话就不必每次都经过 findViewById 方法来获取控件实例 */ class ViewHolder { ImageView iv; TextView tv_title; TextView tv_content; } }
listView.setOnScrollListener(new AbsListView.OnScrollListener() { int currentCount = 0; @Override public void onScrollStateChanged(AbsListView view, int scrollState) { if (currentCount != 0 && currentCount == listView.getCount()) { Toast.makeText(ListViewActivity.this, "Loading......", Toast.LENGTH_SHORT).show(); } } @Override public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) { currentCount = firstVisibleItem + visibleItemCount; } });