ListView
来源:互联网 发布:猎豹刷票软件 编辑:程序博客网 时间:2024/06/05 14:17
[ ListView 控件]
< ListView的简单用法 >
MainActivity.java
protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //ArrayAdapter<>( 当前上下文, ListView 子项布局的id, 适配的数据 ) ArrayAdapter<String> adapter = new ArrayAdapter<String>(MainActivity.this, android.R.layout.simple_list_item_1, data); ListView listView = (ListView) findViewById(R.id.list_view); listView.setAdapter(adapter); }
< 定制 ListView 界面 >
Fruit.java( ListView 子项定义为一个类)
public class Fruit { private String name; private int imageId; public Fruit(String name, int imageId){ this.imageId = imageId; this.name = name; } public String getName(){ return name; } public int getImageId() { return imageId; }}
FruitAdapter.java(自定义的 Adapter)
public class FruitAdapter extends ArrayAdapter<Fruit> { private int resourceId; // 重写构造方法,将 上下文,ListView 子项布局的id,数据。都传进来 public FruitAdapter(Context context, int textViewResourceId, List<Fruit> objects) { super(context, textViewResourceId, objects); resourceId = textViewResourceId; } // 这个方法在每个子项被滚到屏幕的时候调用 @Override public View getView(int position, View convertView, ViewGroup parent){ // getItem() 方法获取当前的实例 Fruit fruit = getItem(position); //LayoutInflater() 为这个子项加载我们传入的布局 View view = LayoutInflater.from(getContext()).inflate(resourceId, null); 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; }}
MainActivity.java
public class MainActivity extends AppCompatActivity { private List<Fruit> fruitList = new ArrayList<Fruit>(); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //初始化水果数据 initFruits(); FruitAdapter adapter = new FruitAdapter(MainActivity.this, R.layout.fruit_item, fruitList); ListView listView = (ListView) findViewById(R.id.list_view); listView.setAdapter(adapter); } private void initFruits() { Fruit apple = new Fruit("Apple", R.drawable.apple_pic); fruitList.add(apple); }}
fruit_item.xml
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="50dp"> <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" android:layout_gravity="center" android:layout_marginLeft="10dp" android:textSize="20dp"/></LinearLayout>
< 提升 LisstView 的运行效率 >
- 自定义的 Adapter 中
getView()
方法的 convertView 参数是将之前加载好的布局进行缓存 - 创建 ViewHolder 内部类,将通过 findViewById() 获取的控件存放进去。这样就不需要次次用 findViewById 来获取
public class FruitAdapter extends ArrayAdapter<Fruit> { private int resourceId; ... // 这个方法在每个子项被滚到屏幕的时候调用 @Override public View getView(int position, View convertView, ViewGroup parent){ ... //LayoutInflater() 为这个子项加载我们传入的布局// View view = LayoutInflater.from(getContext()).inflate(resourceId, null); View view; ViewHolder viewHolder; if(convertView == null){ view = LayoutInflater.from(getContext()).inflate(resourceId, null); viewHolder = new ViewHolder(); viewHolder.fruitImage = (ImageView) view.findViewById(R.id.fruit_image); viewHolder.fruitName = (TextView) view.findViewById(R.id.fruit_name); view.setTag(viewHolder); //将 ViewHolder 存储在 View 中 }else{ view = convertView; // getTag() 方法将 ViewHolder 重新取出 viewHolder = (ViewHolder) view.getTag(); }// 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()); viewHolder.fruitImage.setImageResource(fruit.getImageId()); viewHolder.fruitName.setText(fruit.getName()); return view; } //将所有控件实例都放在 ViewHolder 中,而不要次次通过 findViewById() 来获取实例控件了 class ViewHolder{ ImageView fruitImage; TextView fruitName; }}
< LisstView 的点击事件 >
- 运用
setOnItemClickListener()
方法来为 ListView 注册一个监听器 - 用户点击 ListView 任何子项都会回调
onItemClick()
方法 - 通过 position 参数判断用户点击的是哪一个子项
listView.setOnItemClickListener(new OnItemClickListener(){ @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { Fruit fruit = fruitList.get(position); Toast.makeText(MainActivity.this, fruit.getName(), Toast.LENGTH_SHORT).show(); } });
0 0
- listview
- listview
- listview
- ListView
- ListView
- listview
- listview
- listView
- ListView
- ListView
- ListView
- listview
- LIstView
- ListView
- listview
- ListView
- ListView
- ListView
- velocity判断空和null
- 为什么使用maven
- 关于MPLL和UPLL的学习
- App缓存管理
- RunLoop的应用
- ListView
- 欢迎使用CSDN-markdown编辑器
- ORACLE 11g体系结构概述
- 如何提高CSDN博客排名
- JZ3055比赛
- 树形DP poj1155
- 基于位置的服务
- Windows环境Mycat数据库分库分表中间件部署
- zencart站内优化-给产品描述自动加上锚文本链接