android中listview学习与记录,简单文字列表、自定义列表、多布局、点击回调
简单的文字列表

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<ListView
android:id="@+id/list"
android:layout_width="match_parent"
android:layout_height="match_parent"></ListView>
</androidx.constraintlayout.widget.ConstraintLayout>
public class MainActivity extends AppCompatActivity {
ListView listView;
ArrayAdapter<String> arrayAdapter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
listView = findViewById(R.id.list);
String[] strings = new String[3];
strings[0] = "浙江省";
strings[1] = "江苏省";
strings[2] = "山东省";
arrayAdapter = new ArrayAdapter<String>(MainActivity.this, android.R.layout.simple_expandable_list_item_1, strings);
listView.setAdapter(arrayAdapter);
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
Toast.makeText(MainActivity.this, strings[position], Toast.LENGTH_SHORT).show();
}
});
}
}
自定义布局列表

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<ListView
android:id="@+id/list"
android:layout_width="match_parent"
android:layout_height="match_parent"></ListView>
</androidx.constraintlayout.widget.ConstraintLayout>
class NewItem {
private String id;
private String name;
private Boolean status;
public NewItem(String id, String name, Boolean status) {
this.id = id;
this.name = name;
this.status = status;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Boolean getStatus() {
return status;
}
public void setStatus(Boolean status) {
this.status = status;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
}
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent"
android:layout_height="match_parent">
<CheckBox
android:id="@+id/ck"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_centerVertical="true"/>
<TextView
android:id="@+id/text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_toRightOf="@+id/ck"
android:layout_centerVertical="true"/>
<Button
android:id="@+id/btn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:text="点击"
android:layout_centerVertical="true"/>
</RelativeLayout>
class NewAdapter extends ArrayAdapter<NewItem> {
private int newId;
public NewAdapter(@NonNull Context context, int resource, @NonNull List<NewItem> list) {
super(context, resource, list);
this.newId = resource;
}
@NonNull
@Override
public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent) {
NewItem newItem = getItem(position);
ViewHolder viewHolder = null;
if(viewHolder == null){
viewHolder = new ViewHolder();
convertView = LayoutInflater.from(getContext()).inflate(newId,parent,false);
viewHolder.textView = convertView.findViewById(R.id.text);
viewHolder.checkBox = convertView .findViewById(R.id.ck);
viewHolder.button = convertView.findViewById(R.id.btn);
convertView.setTag(viewHolder);
}else{
viewHolder = (ViewHolder) convertView.getTag();
}
viewHolder.textView.setText(newItem.getName());
if(newItem.getStatus()){
viewHolder.checkBox.setChecked(true);
}else{
viewHolder.checkBox.setChecked(false);
}
viewHolder.button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(getContext(), newItem.getName(), Toast.LENGTH_SHORT).show();
}
});
return convertView;
}
class ViewHolder{
TextView textView;
CheckBox checkBox;
Button button;
}
}
public class MainActivity extends AppCompatActivity {
ListView listView;
NewAdapter newAdapter;
List<NewItem> newItemList;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
listView = findViewById(R.id.list);
newItemList = new ArrayList<>();
newItemList.add(new NewItem("1","浙江省",false));
newItemList.add(new NewItem("2","江苏省",true));
newItemList.add(new NewItem("3","山东省",false));
newAdapter = new NewAdapter(MainActivity.this,R.layout.new_item,newItemList);
listView.setAdapter(newAdapter);
}
}
当点击事件需要操作activity中的内容时
class NewAdapter extends ArrayAdapter<NewItem> {
private int newId;
private BtnClickListerner btnClickListerner;
public NewAdapter(@NonNull Context context, int resource, @NonNull List<NewItem> list,BtnClickListerner btnClickListerner) {
super(context, resource, list);
this.newId = resource;
this.btnClickListerner = btnClickListerner;
}
public interface BtnClickListerner{
public void onBtnClick(int position);
}
@NonNull
@Override
public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent) {
NewItem newItem = getItem(position);
ViewHolder viewHolder = null;
if(viewHolder == null){
viewHolder = new ViewHolder();
convertView = LayoutInflater.from(getContext()).inflate(newId,parent,false);
viewHolder.textView = convertView.findViewById(R.id.text);
viewHolder.checkBox = convertView .findViewById(R.id.ck);
viewHolder.button = convertView.findViewById(R.id.btn);
convertView.setTag(viewHolder);
}else{
viewHolder = (ViewHolder) convertView.getTag();
}
viewHolder.textView.setText(newItem.getName());
if(newItem.getStatus()){
viewHolder.checkBox.setChecked(true);
}else{
viewHolder.checkBox.setChecked(false);
}
viewHolder.button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
btnClickListerner.onBtnClick(position);
}
});
return convertView;
}
class ViewHolder{
TextView textView;
CheckBox checkBox;
Button button;
}
}
public class MainActivity extends AppCompatActivity {
ListView listView;
NewAdapter newAdapter;
List<NewItem> newItemList;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
listView = findViewById(R.id.list);
newItemList = new ArrayList<>();
newItemList.add(new NewItem("1","浙江省",false));
newItemList.add(new NewItem("2","江苏省",true));
newItemList.add(new NewItem("3","山东省",false));
newAdapter = new NewAdapter(MainActivity.this, R.layout.new_item, newItemList, new NewAdapter.BtnClickListerner() {
@Override
public void onBtnClick(int position) {
getItem(position);
}
});
listView.setAdapter(newAdapter);
}
private void getItem(int position) {
Toast.makeText(MainActivity.this, ""+ position, Toast.LENGTH_SHORT).show();
}
}
一个列表,多种布局

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<ListView
android:id="@+id/list"
android:layout_width="match_parent"
android:layout_height="match_parent"></ListView>
</androidx.constraintlayout.widget.ConstraintLayout>
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent"
android:layout_height="match_parent">
<CheckBox
android:id="@+id/ck"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_centerVertical="true"/>
<TextView
android:id="@+id/text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_toRightOf="@+id/ck"
android:layout_centerVertical="true"/>
<Button
android:id="@+id/btn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:text="点击"
android:layout_centerVertical="true"/>
</RelativeLayout>
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent"
android:layout_height="match_parent">
<ImageView
android:id="@+id/img"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<TextView
android:id="@+id/text"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:gravity="center"
android:layout_centerVertical="true"/>
</LinearLayout>
class NewAdapter extends ArrayAdapter<NewItem> {
private int newId;
private BtnClickListerner btnClickListerner;
private List<NewItem> newItemList;
public NewAdapter(@NonNull Context context, int resource, @NonNull List<NewItem> list,BtnClickListerner btnClickListerner) {
super(context, resource, list);
this.newId = resource;
this.btnClickListerner = btnClickListerner;
this.newItemList = list;
}
public interface BtnClickListerner{
public void onBtnClick(int position);
}
@NonNull
@Override
public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent) {
NewItem newItem = getItem(position);
ViewHolder viewHolder = null;
ViewHolder1 viewHolder1 = null;
if(convertView == null){
if(newItem.getType() == 1){
viewHolder = new ViewHolder();
convertView = LayoutInflater.from(getContext()).inflate(newItem.getLayoutId(),parent,false);
viewHolder.textView = convertView.findViewById(R.id.text);
viewHolder.checkBox = convertView .findViewById(R.id.ck);
viewHolder.button = convertView.findViewById(R.id.btn);
convertView.setTag(viewHolder);
viewHolder.textView.setText(newItem.getName());
if(newItem.getStatus()){
viewHolder.checkBox.setChecked(true);
}else{
viewHolder.checkBox.setChecked(false);
}
viewHolder.button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
btnClickListerner.onBtnClick(position);
}
});
}else{
viewHolder1 = new ViewHolder1();
convertView = LayoutInflater.from(getContext()).inflate(newItem.getLayoutId(),parent,false);
viewHolder1.imageView = convertView.findViewById(R.id.img);
viewHolder1.textView = convertView.findViewById(R.id.text);
convertView.setTag(viewHolder1);
viewHolder1.imageView.setImageResource(R.drawable.ic_launcher_background);
viewHolder1.textView.setText(newItem.getName());
}
}else{
if(newItem.getType() == 1) {
viewHolder = (ViewHolder) convertView.getTag();
viewHolder.textView.setText(newItem.getName());
if(newItem.getStatus()){
viewHolder.checkBox.setChecked(true);
}else{
viewHolder.checkBox.setChecked(false);
}
viewHolder.button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
btnClickListerner.onBtnClick(position);
}
});
}else{
viewHolder1 = (ViewHolder1) convertView.getTag();
viewHolder1.imageView.setImageResource(R.drawable.ic_launcher_background);
viewHolder1.textView.setText(newItem.getName());
}
}
return convertView;
}
class ViewHolder{
TextView textView;
CheckBox checkBox;
Button button;
}
class ViewHolder1{
TextView textView;
ImageView imageView;
}
@Override
public int getItemViewType(int position) {
return newItemList.get(position).getType();
}
}
public class MainActivity extends AppCompatActivity {
ListView listView;
NewAdapter newAdapter;
List<NewItem> newItemList;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
listView = findViewById(R.id.list);
newItemList = new ArrayList<>();
newItemList.add(new NewItem("1","浙江省",false,1,R.layout.new_item));
newItemList.add(new NewItem("2","江苏省",true,2,R.layout.new_item1));
newItemList.add(new NewItem("3","山东省",false,1,R.layout.new_item));
newAdapter = new NewAdapter(MainActivity.this, R.layout.new_item, newItemList, new NewAdapter.BtnClickListerner() {
@Override
public void onBtnClick(int position) {
getItem(position);
}
});
listView.setAdapter(newAdapter);
}
private void getItem(int position) {
Toast.makeText(MainActivity.this, ""+ position, Toast.LENGTH_SHORT).show();
}
}