@
文中使用的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"
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView
android:id="@+id/textView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="29dp"
android:layout_marginTop="33dp"
android:text="标题"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:id="@+id/textView2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="4dp"
android:layout_marginTop="18dp"
android:text="内容"
app:layout_constraintStart_toStartOf="@+id/textView"
app:layout_constraintTop_toBottomOf="@+id/textView" />
</androidx.constraintlayout.widget.ConstraintLayout>
//文中使用的实体类
public class News {
public String title; // 标题
public String content; //内容
}
//文中使用的成员变量
ListView mListView;
List<News> mNewsList = new ArrayList<>();
List<Map<String,String>> mapList = new ArrayList<>();
//文中使用的数据
for (int i = 0; i < 50; i++) {
News news = new News();
news.title = "标题" + i;
news.content = "内容" + i;
mNewsList.add(news);
Map<String,String> map = new HashMap<>();
map.put("title","标题" + i);
map.put("content","内容" + i);
mapList.add(map);
}
ArrayAdapter
简单的数组适配器,继承自BaseAdapter,适用于填充数据是字符串数组类型。
//一般使用
mListView.setAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, new String[]{
"hello",
"world",
"你好"
}));
//自定义ArrayAdapter:可以使用对象列表或数组来对自定义布局进行数据绑定
class MyArrayAdapter extends ArrayAdapter<News>{
int mResource;
public MyArrayAdapter(@NonNull Context context, int resource) {
super(context, resource);
mResource = resource;
}
@Override
public int getCount() {
return mNewsList.size();
}
@Nullable
@Override
public News getItem(int position) {
return mNewsList.get(position);
}
@Override
public int getPosition(@Nullable News item) {
return mNewsList.indexOf(item);
}
@NonNull
@Override
public View getView(int position, @Nullable View convertView, @NonNull ViewGroup parent) {
MyViewHolder myViewHolder = null;
if(convertView == null){
convertView = getLayoutInflater().inflate(mResource,parent,false);
myViewHolder = new MyViewHolder(convertView);
convertView.setTag(myViewHolder);
}else{
myViewHolder = (MyViewHolder) convertView.getTag();
}
myViewHolder.tv1.setText(mNewsList.get(position).title);
myViewHolder.tv2.setText(mNewsList.get(position).content);
return convertView;
}
class MyViewHolder{
TextView tv1,tv2;
public MyViewHolder(View view){
tv1 = view.findViewById(R.id.textView);
tv2 = view.findViewById(R.id.textView2);
}
}
}
SimpleAdapter
较为复杂的适配器,同样继承于BaseApapter,适用于不太复杂的对象和布局数据绑定。
//参数一:上下文
//参数二:数据列表List<Map<String,String>>
//参数三:布局文件
//参数四:map中的键
//参数五:布局中对应的控件id
mListView.setAdapter(new SimpleAdapter(this,mapList,R.layout.item_list,new String[]{
"title","content"
},new int[]{
R.id.textView,R.id.textView2
}));
BaseAdapter
所有Adapter的基类,一般使用它进行扩展。
class MyListViewAdapter extends BaseAdapter{
@Override
public int getCount() {
return mNewsList.size();
}
@Override
public Object getItem(int i) {
return mNewsList.get(i);
}
@Override
public long getItemId(int i) {
return i;
}
@Override
public View getView(int i, View view, ViewGroup viewGroup) {
MyViewHolder myViewHolder = null;
if(view == null){
view = getLayoutInflater().inflate(R.layout.item_list,viewGroup,false);
myViewHolder = new MyViewHolder(view);
view.setTag(myViewHolder);
}else{
myViewHolder = (MyViewHolder)view.getTag();
}
myViewHolder.tv1.setText(mNewsList.get(i).title);
myViewHolder.tv2.setText(mNewsList.get(i).content);
return view;
}
class MyViewHolder{
TextView tv1,tv2;
public MyViewHolder(View view){
tv1 = view.findViewById(R.id.textView);
tv2 = view.findViewById(R.id.textView2);
}
}
}
浙公网安备 33010602011771号