8、ListView
简单的listview,可以滚动到屏幕外
private
String[]
data
= {
"apple"
,
"Orange"
};
private
List<Fruit>
fruitList
=
new
ArrayList<Fruit>();
@Override
protected void
onCreate(Bundle savedInstanceState) {
super
.onCreate(savedInstanceState);
setContentView(R.layout.
activity_main
);
ArrayAdapter<String> adaper =
new
ArrayAdapter<String>(
MainActivity.
this
, android.R.layout.
simple_list_item_1
,
data
);
ListView listview = (ListView) findViewById(R.id.
list_view
);
listview.setAdapter(adaper);
}
9、ListView2 复杂listview实例
activity.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=
"match_parent"
>
<
ListView
android
:id=
"@+id/list_view"
android
:layout_width=
"match_parent"
android
:layout_height=
"match_parent"
>
</
ListView
>
</
LinearLayout
>
MainActivity.java
package
com.example.listviewtest;
import
android.support.v7.app.AppCompatActivity;
import
android.os.Bundle;
import
android.view.View;
import
android.widget.AdapterView;
import
android.widget.ArrayAdapter;
import
android.widget.ListView;
import
android.widget.Toast;
import
java.util.ArrayList;
import
java.util.List;
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);
listView.setOnItemClickListener(
new
AdapterView.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();
}
});
}
private void
initFruits() {
for
(
int
i =
0
; i <
2
; i++) {
Fruit apple =
new
Fruit(
"Apple"
, R.drawable.
apple_pic
);
fruitList
.add(apple);
Fruit banana =
new
Fruit(
"Banana"
, R.drawable.
banana_pic
);
fruitList
.add(banana);
Fruit orange =
new
Fruit(
"Orange"
, R.drawable.
orange_pic
);
fruitList
.add(orange);
Fruit watermelon =
new
Fruit(
"Watermelon"
, R.drawable.
watermelon_pic
);
fruitList
.add(watermelon);
Fruit pear =
new
Fruit(
"Pear"
, R.drawable.
pear_pic
);
fruitList
.add(pear);
Fruit grape =
new
Fruit(
"Grape"
, R.drawable.
grape_pic
);
fruitList
.add(grape);
Fruit pineapple =
new
Fruit(
"Pineapple"
, R.drawable.
pineapple_pic
);
fruitList
.add(pineapple);
Fruit strawberry =
new
Fruit(
"Strawberry"
, R.drawable.
strawberry_pic
);
fruitList
.add(strawberry);
Fruit cherry =
new
Fruit(
"Cherry"
, R.drawable.
cherry_pic
);
fruitList
.add(cherry);
Fruit mango =
new
Fruit(
"Mango"
, R.drawable.
mango_pic
);
fruitList
.add(mango);
}
}
}
Fruit.java
package
com.example.listviewtest;
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
;
}
}
fruit_item.xml
<?
xml version=
"1.0"
encoding=
"utf-8"
?>
<
LinearLayout
xmlns:
android
=
"http://schemas.android.com/apk/res/android"
android
:orientation=
"horizontal"
android
:layout_width=
"match_parent"
android
:layout_height=
"match_parent"
>
<
ImageView
android
:id=
"@+id/fruit_image"
android
:layout_width=
"wrap_content"
android
:layout_height=
"wrap_content"
/>
<
TextView
android
:id=
"@+id/fruit_name"
android
:layout_width=
"wrap_content"
android
:layout_height=
"wrap_content"
android
:layout_gravity=
"center_vertical"
android
:layout_marginLeft=
"10dp"
/>
</
LinearLayout
>
FruitAdapter.java
package
com.example.listviewtest;
import
android.content.Context;
import
android.view.LayoutInflater;
import
android.view.View;
import
android.view.ViewGroup;
import
android.widget.ArrayAdapter;
import
android.widget.ImageView;
import
android.widget.TextView;
import
java.util.List;
public class
FruitAdapter
extends
ArrayAdapter<Fruit> {
private int
resourceId
;
public
FruitAdapter(Context context,
int
itemLayoutResourceId
, List<Fruit> objects) {
super
(context,
itemLayoutResourceId
, objects);
resourceId
=
itemLayoutResourceId
;
}
@Override
//View convertView 用于将之前加载好的数据缓存
public
View getView(
int
position, View convertView, ViewGroup parent) {
Fruit fruit = getItem(position);
// 获取当前项的Fruit实例
View view;
ViewHolder viewHolder;
if
(convertView ==
null
) {
// 如果说当前子布局没有在缓存中,那么就在这里创建这个view
// 然后把布局加载到 viewHolder 里面;再把 viewHolder 放到 view中
// 然后把当前一个子布局的值填进去,最后返回view就行,不用对里面的viewHolder 做操作。
view = LayoutInflater.
from
(getContext()).inflate(
resourceId
, parent,
false
);
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;
viewHolder = (ViewHolder) view.getTag();
// 重新获取ViewHolder
}
viewHolder.
fruitImage
.setImageResource(fruit.getImageId());
viewHolder.
fruitName
.setText(fruit.getName());
return
view;
}
class
ViewHolder {
ImageView
fruitImage
;
TextView
fruitName
;
}
}