1.自定义控件
2.ListView(项目2019/ListviewTest)
(1)写一个item.xml的布局,作为listview中的每个子布局。
(2)建一个实体类,比如fruit类。
(3)自定义一个Adapter,继承ArrayAdapter,并重写getView方法,见代码1.
//用这个获取当前项的fruit实例
Fruit fruit = getItem(position);/
/* 用这个获得listview中的每一个子布局,两种写法,都可以,我不太懂,有兴趣的小伙伴可以去研究一下。
将fruit实例中的每一个属性的值赋到view中去。*/
view = LayoutInflater.from(getContext()).inflate(resourceId,parent,false);
view = LayoutInflater.from(getContext()).inflate(resourceId, null);
(4)在父布局中,将adapter、子布局与父布局联系起来,并为listview中的每一条加监听。见代码2
代码1:
自定义Adapter的getView的简单写法
@Override
public View getView(int position, View convertView, ViewGroup parent) {
Fruit fruit = getItem(position);//获取当前项的Fruit实例
View view = LayoutInflater.from(getContext()).inflate(resourceId,parent,false);
ImageView fruitImage = view.findViewById(R.id.fruit_image);
TextView fruitName = view.findViewById(R.id.fruit_name);
fruitImage.setImageResource(fruit.getImageId());
fruitName .setText(fruit.getName());
return view;
}
自定义Adapter的getView高效率写法
@Override
public View getView(int position, View convertView, ViewGroup parent) {
Fruit fruit = getItem(position);//获取当前项的Fruit实例
View view;
ViewHolder viewHolder;
if(convertView==null){
view = LayoutInflater.from(getContext()).inflate(resourceId,parent,false);
viewHolder = new ViewHolder();
viewHolder.fruitImage = view.findViewById(R.id.fruit_image);
viewHolder.fruitName = view.findViewById(R.id.fruit_name);
view.setTag(viewHolder);
}else{
view = convertView;
viewHolder = (ViewHolder) view.getTag();
}
// ImageView fruitImage = view.findViewById(R.id.fruit_image);
// TextView fruitName = view.findViewById(R.id.fruit_name);
viewHolder.fruitImage.setImageResource(fruit.getImageId());
viewHolder.fruitName.setText(fruit.getName());
return view;
}
class ViewHolder {
ImageView fruitImage;
TextView fruitName;
}
代码2
父布局写法:
public class MainActivity extends AppCompatActivity {
private List<Fruit> fruitList = new ArrayList<>();
ListView listView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initFruits();
FruitAdapter fruitAdapter = new FruitAdapter(MainActivity.this,
R.layout.fruit_item, fruitList);
ListView listView = findViewById(R.id.my_list_view);
listView.setAdapter(fruitAdapter);
listView.setOnItemClickListener(
new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {
Fruit fruit = fruitList.get(i);
Toast.makeText(MainActivity.this, fruit.getName(), Toast.LENGTH_SHORT).show();
}
}
);
}
private void initFruits(){
for(int i=0;i<3;i++){
Fruit apple = new Fruit("apple", R.drawable.ic_launcher_background);
fruitList.add(apple);
Fruit banana = new Fruit("banana", R.drawable.ic_launcher_background);
fruitList.add(banana);
Fruit grape = new Fruit("grape", R.drawable.ic_launcher_background);
fruitList.add(grape);
}
}
}