smile908

导航

初识ListView

  • BaseAdapter:抽象类,实际开发中我们会继承这个类并且重写相关方法,用得最多的一个Adapter!
  • ArrayAdapter:支持泛型操作,最简单的一个Adapter,只能展现一行文字~
  • SimpleAdapter:同样具有良好扩展性的一个Adapter,可以自定义多种效果

 

今天来简单实现arrayAdapt和SimpleAdapter,记录一下。

关于SimpleAdapter

1:ListView主界面,线性布局

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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"
android:orientation="vertical"
tools:context=".adapter.ListActivity">

<ListView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:minHeight="30dp"
android:id="@+id/List_view"
//这里是ArrayList的数据xml部分
android:entries="@array/myarray"/>
</LinearLayout>


item的页面布局部分
<?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"
android:orientation="horizontal">

<!-- 定义一个用于显示头像的ImageView -->
<ImageView
android:id="@+id/imgtou"
android:layout_width="64dp"
android:layout_height="64dp"
android:baselineAlignBottom="true"
android:paddingLeft="8dp" />

<!-- 定义一个竖直方向的LinearLayout,把QQ呢称与说说的文本框设置出来 -->
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">

<TextView
android:id="@+id/name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingLeft="8dp"
android:textColor="#1D1D1C"
android:textSize="20sp" />

<TextView
android:id="@+id/says"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingLeft="8px"
android:textColor="#B4B4B9"
android:textSize="14sp" />
</LinearLayout>
</LinearLayout>

主界面逻辑以及适配器部分
package com.example.example.adapter;

import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.ListView;
import android.widget.SimpleAdapter;

import com.example.example.R;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class ListActivity extends AppCompatActivity {
private String[] names = new String[]{"Android", "Java", "C++"};
private String[] says = new String[]{"安卓之家", "面向对象~", "功能强大"};
private int[] imgIds = new int[]{R.mipmap.ic_launcher, R.mipmap.ic_launcher, R.mipmap.ic_launcher_round};

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_list);

List<Map<String, Object>> data = new ArrayList<>();
for (int i = 0; i < names.length; i++) {
Map<String, Object> showItem = new HashMap();
showItem.put("image", imgIds[i]);
showItem.put("name", names[i]);
showItem.put("says", says[i]);
data.add(showItem);
}

//创建一个simpleAdapter
SimpleAdapter myAdapter = new SimpleAdapter(getApplicationContext(), data, R.layout.list_item, new String[]{"image", "name", "says"}, new int[]{R.id.image, R.id.name, R.id.says});
ListView listView = (ListView) findViewById(R.id.List_view);
listView.setAdapter(myAdapter);
}
}
运行效果

 

关于ArrayView

view

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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"
android:orientation="vertical"
tools:context=".adapter.ListActivity">

<ListView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:minHeight="30dp"
android:id="@+id/List_view"
android:entries="@array/myarray"/>
</LinearLayout>

逻辑部分
package com.example.example.adapter;

import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.Adapter;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.SimpleAdapter;

import com.example.example.R;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class ListActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_list);
List data=new ArrayList();
data.add("太阳");
data.add("月亮");
data.add("星星");
ListView listView=findViewById(R.id.List_view);
ArrayAdapter<String> arrayAdapter=new ArrayAdapter<>(this, android.R.layout.select_dialog_singlechoice,data);
listView.setAdapter(arrayAdapter);
}
}

 

 


数据部分用的list,也可以用字符数组,也可以自己定义资源文件

资源文件的用法,在values目录下创建arrays.xml文件,并在主布局文件的listView下面添加android:entries="@array/myarray"即可。
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string-array name="myarray">
<item>语文</item>
<item>数学</item>
<item>英语</item>
</string-array>
</resources>

逻辑部分
package com.example.example.adapter;

import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.Adapter;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.SimpleAdapter;

import com.example.example.R;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class ListActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_list);
ListView listView=findViewById(R.id.List_view);
ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(this,
R.array.myarray,android.R.layout.simple_list_item_multiple_choice );
listView.setAdapter(adapter);
}
}

其实就适配器部分和适配器的参数部分发生了改变
ArrayAdapter<CharSequence> adapter = ArrayAdapter.createFromResource(this,
R.array.myarray,android.R.layout.simple_list_item_multiple_choice );
就这一句改变了
运行效果如下:

posted on 2022-08-23 11:33  smile908  阅读(19)  评论(0编辑  收藏  举报