扩展BaseAdapter实现不存储列表项的ListView
扩展BaseAdapter可以取得对Adapter最大的控制权:程序要创建几个列表项,每个列表项组件都有开发人员决定
布局文件activity_main.xml
<?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="0dp"
android:layout_height="0dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="1.0"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
/>
</androidx.constraintlayout.widget.ConstraintLayout>
Activity文件
import androidx.appcompat.app.AppCompatActivity;
import android.annotation.SuppressLint;
import android.graphics.Color;
import android.graphics.Matrix;
import android.media.Image;
import android.os.Bundle;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.TextView;
;
public class MainActivity extends AppCompatActivity {
private ListView listView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
/*初始化listView*/
listView = findViewById(R.id.list);
BaseAdapter adapter = new BaseAdapter() {
@Override
public int getCount() {
return 40;
}
@Override
public Object getItem(int i) {
return null;
}
@Override
public long getItemId(int i) {
return i;
}
/*重写该方法,该方法返回的View作为列表框*/
@Override
public View getView(int i, View view, ViewGroup viewGroup) {
/*创建一个LinearLayout,并向其添加两个组件*/
LinearLayout linearLayout = new LinearLayout(MainActivity.this);
linearLayout.setOrientation(Integer.valueOf(0));
ImageView image = new ImageView(MainActivity.this);
image.setImageResource(R.drawable.ic_launcher_foreground);
TextView textView = new TextView(MainActivity.this);
textView.setText("第"+(i+1)+"个列表项");
textView.setTextSize(20);
textView.setTextColor(Color.RED);
linearLayout.addView(image);
linearLayout.addView(textView);
//返回linearLayout实例
return linearLayout;
}
};
listView.setAdapter(adapter);
}
}
效果图:
扩展BaseAdapter对象,需要重写4个方法。
- getCount():该方法的返回值控制该Adapter将会包含多少个列表项。
- getItem(int position):该方法的返回值决定第position处的列表项内容。
- getItemId(int position):该方法的返回值决定第position处列表项的ID。
- getView(int position,View converView,ViewGroup parent):该方法的返回值决定第position处的列表项组件。