一,一个简单的TextView列表

public class FirstActivity extends Activity {
private String[] data = {"Apple", "Banana", "Orange", "Watermelon",
"Pear", "Grape", "Pineapple", "Strawberry", "Cherry", "Mango","Apple", "Banana", "Orange", "Watermelon","Pear", "Grape", "Pineapple", "Strawberry", "Cherry", "Mango"}; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.first_layout);
ArrayAdapter<String> adapter = new ArrayAdapter<String>( //ArrayAdapter数组适配器
FirstActivity.this, android.R.layout.simple_list_item_1, data);
//第一个参数,上下文对象;第二个参数,一个官方的内置布局的id(这是一个TexView);第三个参数,传入的数据
ListView listView = (ListView) findViewById(R.id.ListView);
listView.setAdapter(adapter);
}
}

二,好玩的东西怎么可以只有Text View呢(来点复杂的)

1.新建一个用于存放水果的类

public class Fruit {
private String name;
private int imageId; //构造器初始化
public Fruit(String name, int imageId) {
this.name = name;
this.imageId = imageId;
} public String getName() {
return name;
} public int getImageId() {
return imageId;
}
}

2.新建一个自定义的布局文件

用于描述布局方式,等待被调用

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal"> <ImageView
android:id="@+id/fruit_image"
android:layout_width="50dp"
android:layout_height="50dp" /> <TextView
android:id="@+id/fruit_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</LinearLayout>

3.自定义适配器,继承于ArrayAdapter,并重写getView方法

public class FruitAdapter extends ArrayAdapter<Fruit> {      //泛型指定为Fruit类,就像String也是一个类
private int resourceId;
//新建FruitAdapter()方法,参数一:上下文对象;参数二:布局文件的ID;参数三:传入的数据
public FruitAdapter(Context context, int textViewResourceId, List<Fruit> objects){
super(context,textViewResourceId,objects);
resourceId = textViewResourceId;
} @NonNull
@Override
//重写getView() 方法,这个方法在内容被加载之前会执行
public View getView(int position, View convertView, ViewGroup parent) {
Fruit fruit = getItem(position);//得到方法传入的Fruit实例
View view = LayoutInflater.from(getContext()).inflate(resourceId,null);//把构造器获取的id值传入view /*ListView的赋值*/
ImageView fruitImage = (ImageView) view.findViewById(R.id.fruit_image);
TextView fruitName = (TextView) view.findViewById(R.id.fruit_name);
fruitImage.setImageResource(fruit.getImageId());
fruitName.setText(fruit.getName());
return view;
}
}

注:在setText的时候不能用int类型数据。

4.在Activity引用的layout中添加<ListView>

    <ListView
android:id="@+id/ListView"
android:layout_width="match_parent"
android:layout_height="wrap_content"> </ListView>

5.在Activity中初始化数据并引用ListView

public class FirstActivity extends Activity {
private List<Fruit> fruitList = new ArrayList<Fruit>(); //创建数组适配器的对象fruitList,范型为<Fruit类>
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.first_layout);
initFruits(); //调用数据初始化函数
FruitAdapter adapter = new FruitAdapter(FirstActivity.this,R.layout.fruit_item,fruitList);
//对应的三个参数,上下文,id,适配器数据 /*对ListView设置自定义适配器的值*/
ListView listView = (ListView) findViewById(R.id.ListView);
listView.setAdapter(adapter);
} /*列表参数的值的传入和列表的添加*/
private void initFruits(){
Fruit apple = new Fruit("Apple",R.drawable.apple);
fruitList.add(apple);//一定记得要把对象添加进列表中
Fruit banana = new Fruit("banana",R.drawable.banane);
fruitList.add(banana);
Fruit grape = new Fruit("grape",R.drawable.grape);
fruitList.add(grape);
Fruit pear = new Fruit("pear",R.drawable.pear);
fruitList.add(pear);
Fruit watermelon = new Fruit("watermelon",R.drawable.watermelon);
fruitList.add(watermelon);
Fruit orange = new Fruit("orange",R.drawable.orange);
fruitList.add(orange);
}
}

二,ListView之优化

1:控件重用,减少重复加载

public View getView(int position, View convertView, ViewGroup parent) {
Music music = getItem(position);
View view;
if (convertView == null) {
//对应getView中的参数coverView,一个加载缓存布局的参数。如果没有加载好的布局,则使用LayoutInflater进行布局加载
view = LayoutInflater.from(getContext()).inflate(ResourceId, null);
}else {
view = convertView;//存在布局,则重载布局
}

2:虽然解决了加载次数,但仍旧每次加载都findViewById

ViewHolder在As加载中出现问题,暂未解决,后续更新优化问题,再研究研究。

三,添加点击事件,为ListView 添加setOnItemClickListener

listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
MainList APP = mainList.get(position);//确定点击位置,返回值为点击类的的对象
if (APP.getImageId() == R.drawable.list_view_icon) {
Intent intent = new Intent(MainActivity.this,MyListView.class);
startActivity(intent);
}
}
});

UI控件之ListView的更多相关文章

  1. ANDROID L——Material Design详解(UI控件)

    转载请注明本文出自大苞米的博客(http://blog.csdn.net/a396901990),谢谢支持! Android L: Google已经确认Android L就是Android Lolli ...

  2. 《深入理解Windows Phone 8.1 UI控件编程》基于最新的Runtime框架

    <深入理解Windows Phone 8.1 UI控件编程>本书基于最新的Windows Phone 8.1 Runtime SDK编写,全面深入地论述了最酷的UI编程技术:实现复杂炫酷的 ...

  3. 与众不同 windows phone (52) - 8.1 新增控件: AutoSuggestBox, ListView, GridView, SemanticZoom

    [源码下载] 与众不同 windows phone (52) - 8.1 新增控件: AutoSuggestBox, ListView, GridView, SemanticZoom 作者:webab ...

  4. Android4.0 -- UI控件之 Menu 菜单的的使用(三)

    上一讲 [Android 开发]:UI控件之 Menu 菜单的的使用(二) 我们讲解了创建上下文菜单的第一种使用方式:Creating a floating context menu [创建悬浮的上下 ...

  5. AndroidUI开源组件库BottomView 第三方自定义UI控件

    这里分享一个Android的非常经典实用而且简单方便的第三方UI控件库:BottomView(小米的米UI也用到了这个) 原文  http://blog.csdn.net/opzoonzhuzheng ...

  6. 重新想象 Windows 8 Store Apps (11) - 控件之 ListView 和 GridView

    原文:重新想象 Windows 8 Store Apps (11) - 控件之 ListView 和 GridView [源码下载] 重新想象 Windows 8 Store Apps (11) - ...

  7. JavaFX 的 UI 控件集 ControlsFX

    出处:http://www.oschina.net/p/controlsfx JavaFX 的 UI 控件集 ControlsFX ControlsFX 开源项目旨在为 JavaFX 开发提供更多的 ...

  8. Cocos2d-x之UI控件简介

    |   版权声明:本文为博主原创文章,未经博主允许不得转载. 在Cocos2d-x中提供了一种UI控件,UI控件是指用户交互界面的操作部件.UI控件可以是Button(按钮),CheckBox(选择框 ...

  9. WinForm/Silverlight多线程编程中如何更新UI控件的值

    单线程的winfom程序中,设置一个控件的值是很easy的事情,直接 this.TextBox1.value = "Hello World!";就搞定了,但是如果在一个新线程中这么 ...

随机推荐

  1. mysql 数据库隔离级别

    select @@tx_isolation; 4种隔离级别 1.read uncommitted 2.read committed 3.repeatable read(MySQL默认隔离级别) 4.  ...

  2. Sublime Text插件:HTML+CSS+JAVASCRIPT+JSON快速格式化[转]

    今天在github上乱逛,无意间找到victorporof分享的htmlpretty插件,特做推荐: 先看看他是怎么描述htmlpretty的: This is a Sublime Text 2 an ...

  3. Eclipse中使用SVN

    1.在Eclipse里下载Subclipse插件   方法一:从Eclipse Marketplace里面下载 具体操作:打开Eclipse --> Help --> Eclipse Ma ...

  4. 【2016 ACM/ICPC Asia Regional Qingdao Online】

    [ HDU 5878 ] I Count Two Three 考虑极端,1e9就是2的30次方,3的17次方,5的12次方,7的10次方. 而且,不超过1e9的乘积不过5000多个,于是预处理出来,然 ...

  5. Leetcode 200. number of Islands

    Given a 2d grid map of '1's (land) and '0's (water), count the number of islands. An island is surro ...

  6. oracle大数据量。表分区提示查询效率

    现在业务有一张usertrack 日志记录表.每天会产生30万条数据.数据量大查询效率会非常慢 所以我考虑通过表分区来提示效率  逻辑上是一张表.但是分区后会按照分区条件将数据分在不同的物理文件 优点 ...

  7. 如何查询Oracle中所有用户信息

    1.查看所有用户: select * from dba_users; select * from all_users; select * from user_users; 2.查看用户或角色系统权限( ...

  8. memcached的分布式

    今天写点周末在火车上看的memcached的东西: 一:memcached的分布式 虽然memcached被称为“分布式”缓存服务器,但是服务器端并没有“分布式”的功能.而是通过客户端来实现的. Me ...

  9. Axure7.0中文汉化语言包下载 axure汉化包

    Axure RP Pro 7.0 正式版 (兼容 6 版) 简体中文语言包 支持 Axure RP Pro 正式版 当前最新版本 7.0.0.3142 废话不多说,直接给下载地址: Axure7.0中 ...

  10. 【Alpha版本】冲刺-Day3

    队伍:606notconnected 会议时间:11月11日 会议总结 张斯巍(433) 今天安排:个人信息界面设计 完成度:100% 明天计划:个人信息界面设计 遇到的问题:ps掌握的还不够熟练,导 ...