本篇博客(实例代码)讲ListView自定义Adapter的用法,重点为使用convertView优化程序,并对使用CheckBox产生的问题予以解决
MyListViewActivity
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.Button;
import android.widget.ListView;
import android.widget.Toast;
import java.util.ArrayList;
import java.util.List;
public class MyListViewActivity extends AppCompatActivity implements View.OnClickListener {
List<Fruit> fruitList = new ArrayList<>();
private MyFruitAdapter adapter;
private Button selectAll;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_mylistview);
prepareFruits();
selectAll = findViewById(R.id.btn_selectAll);
selectAll.setOnClickListener(this);
Button deleteSelected = findViewById(R.id.btn_deleteSelected);
deleteSelected.setOnClickListener(this);
adapter = new MyFruitAdapter(MyListViewActivity.this, R.layout.myfruititem, fruitList);
ListView listView = this.findViewById(R.id.lv_fruits);
listView.setAdapter(adapter);
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
Toast.makeText(MyListViewActivity.this, adapter.getItem(position).getName(), Toast.LENGTH_LONG).show();
}
});
}
public void onClick(View view) {
int id = view.getId();
switch (id) {
case R.id.btn_selectAll:
Button btn = (Button) view;
if (btn.getText().equals("SelectAll")) {
btn.setText("SelectNone");
adapter.selectAll();
} else {
btn.setText("SelectAll");
adapter.selectNone();
}
break;
case R.id.btn_deleteSelected:
adapter.deleteSelected();
break;
default:
break;
}
}
public void prepareFruits() {
for (int i = 0; i < 20; i++) {
fruitList.add(new Fruit("Apple" + String.valueOf(i), R.drawable.apple_pic));
fruitList.add(new Fruit("Banana" + String.valueOf(i), R.drawable.banana_pic));
fruitList.add(new Fruit("Orange" + String.valueOf(i), R.drawable.orange_pic));
fruitList.