Android ListView (多个adapter 说明)
最近維護(hù)項(xiàng)目,項(xiàng)目里面使用的都是ListView 這里也對(duì)ListView 回顧一下
以下 demo 地址
ListView 在Android 里面用來(lái)實(shí)現(xiàn)列表的,
在xml 中創(chuàng)建ListView 代碼如下
<?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="vertical"><ListViewandroid:id="@+id/listView"android:layout_width="match_parent"android:layout_height="match_parent" /></LinearLayout>
實(shí)現(xiàn)list 換需要適配器(Adapter) ,ListView常用的適配器(Adapter)有以下幾種。
1? ArrayAdapter 綁定數(shù)組
2? SimpleAdapter 綁定xml 中對(duì)應(yīng)的數(shù)據(jù)
3? SimpleCursorAdapter 綁定游標(biāo)
4??BaseAdapter 通用的是適配器,(一般都是自定義)
1? ArrayAdapter 綁定數(shù)組
下面寫(xiě)一個(gè)demo
xml 使用上面的
java 代碼如下
public class ArrayAdapterActivity extends AppCompatActivity {private String[] data = {"Android", "Java", "C++", "PHP", "Python", "JS", "HTML", "CSS"};@Overrideprotected void onCreate(@Nullable Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.array_adapter_activity_layout);final ListView listView = findViewById(R.id.listView);final ArrayAdapter<String>adapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1,data);listView.setAdapter(adapter);listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {@Overridepublic void onItemClick(AdapterView<?> parent, View view, int position, long id) {Toast.makeText(ArrayAdapterActivity.this, adapter.getItem(position),Toast.LENGTH_SHORT).show();}});}
}
實(shí)現(xiàn)效果
沒(méi)有分割線(xiàn),設(shè)置一下
// 設(shè)置分割線(xiàn)listView.setDivider(new ColorDrawable(Color.RED));// 設(shè)置分割線(xiàn)的寬度listView.setDividerHeight(5);
設(shè)置之后的效果'
'
2?SimpleAdapter
java 代碼如下
public class SimpleAdapterActivity extends AppCompatActivity {private String[] project = {"Android", "Java", "C++", "PHP", "Python", "JS", "HTML", "CSS"};private String[] dev = {"張三", "李四", "王二", "小趙", "小錢(qián)", "小孫", "小李", "小明"};@Overrideprotected void onCreate(@Nullable Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.simple_adapter_activity_layout);ArrayList<Map<String, Object>> mData = new ArrayList<>();int lengh = project.length;for (int i = 0; i < lengh; i++) {Map<String, Object> item = new HashMap<>();item.put("project", project[i]);item.put("dev", dev[i]);mData.add(item);}ListView listView = findViewById(R.id.list);SimpleAdapter adapter = new SimpleAdapter(this, mData, android.R.layout.simple_list_item_2,new String[] {"project", "dev"},new int[] {android.R.id.text1, android.R.id.text2});// 設(shè)置分割線(xiàn)listView.setDivider(new ColorDrawable(Color.RED));// 設(shè)置分割線(xiàn)的寬度listView.setDividerHeight(5);listView.setAdapter(adapter);}
}
實(shí)現(xiàn)的效果如下
從上面的代碼可以看到adapter 加載item layout 使用的是同,其實(shí)我們可以自己寫(xiě)layout ,下面寫(xiě)一個(gè)橫線(xiàn)的layout
layout 代碼如下
<?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="80dp"android:orientation="horizontal"><TextViewandroid:id="@+id/simple_id"android:layout_width="wrap_content"android:layout_height="match_parent"android:layout_gravity="center"android:textColor="@android:color/holo_blue_light"android:gravity="center" /><TextViewandroid:id="@+id/simple_name"android:layout_width="wrap_content"android:layout_height="match_parent"android:layout_gravity="center"android:layout_marginLeft="50dp"android:textColor="@android:color/holo_blue_light"android:gravity="center" /><TextViewandroid:id="@+id/simple_sex"android:layout_width="wrap_content"android:layout_height="match_parent"android:layout_gravity="center"android:textSize="20sp"android:textColor="@android:color/holo_red_dark"android:layout_marginLeft="100dp"android:gravity="center" /><TextViewandroid:id="@+id/simple_class"android:layout_width="wrap_content"android:layout_height="match_parent"android:layout_gravity="center"android:textSize="28sp"android:textColor="@android:color/holo_purple"android:layout_marginLeft="100dp"android:gravity="center" /></LinearLayout>
java 代碼如下
public class SingleSimpleAdapterActivity extends AppCompatActivity {@Overrideprotected void onCreate(@Nullable Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.simple_adapter_activity_layout);List<Map<String, Object>> mData = new ArrayList<>();Map<String, Object> map1 = new HashMap<>();map1.put("name", "張三");map1.put("sex", "男");map1.put("class", "一年級(jí)");Map<String, Object> map2 = new HashMap<>();map2.put("name", "李四");map2.put("sex", "男");map2.put("class", "二年級(jí)");Map<String, Object> map3 = new HashMap<>();map3.put("name", "王二");map3.put("sex", "男");map3.put("class", "三年級(jí)");Map<String, Object> map4 = new HashMap<>();map4.put("name", "春花");map4.put("sex", "女");map4.put("class", "一年級(jí)");Map<String, Object> map5 = new HashMap<>();map5.put("name", "夏草");map5.put("sex", "女");map5.put("class", "二年級(jí)");Map<String, Object> map6 = new HashMap<>();map6.put("name", "秋香");map6.put("sex", "女");map6.put("class", "三年級(jí)");mData.add(map1);mData.add(map2);mData.add(map3);mData.add(map4);mData.add(map5);mData.add(map6);ListView listView = findViewById(R.id.list);SimpleAdapter adapter = new SimpleAdapter(this, mData, R.layout.single_simple_adapter_item, new String[] {"name", "sex", "class"},new int[] {R.id.simple_name, R.id.simple_sex, R.id.simple_class});// 設(shè)置分割線(xiàn)listView.setDivider(new ColorDrawable(Color.RED));// 設(shè)置分割線(xiàn)的寬度listView.setDividerHeight(5);listView.setAdapter(adapter);}
}
實(shí)現(xiàn)的效果圖
3? SimpleCursorAdapter 的主要代碼如下
public class SimpleCursorActivity extends AppCompatActivity {@Overrideprotected void onCreate(@Nullable Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.simple_adapter_activity_layout);String[] simpleCursor = new String[] {"_id", "name", "sex", "class"};MatrixCursor cursor = new MatrixCursor(simpleCursor);cursor.addRow(new Object[] {null,"張三", "男", "一年級(jí)"});cursor.addRow(new Object[] {null,"李四", "男", "二年級(jí)"});cursor.addRow(new Object[] {null,"王二", "男", "三年級(jí)"});cursor.addRow(new Object[] {null,"春花", "女", "一年級(jí)"});cursor.addRow(new Object[] {null,"夏草", "女", "二年級(jí)"});cursor.addRow(new Object[] {null,"秋香", "女", "三年級(jí)"});ListView listView = findViewById(R.id.list);SimpleCursorAdapter adapter = new SimpleCursorAdapter(this,R.layout.single_simple_adapter_item, cursor, simpleCursor,new int[] {R.id.simple_id,R.id.simple_name, R.id.simple_sex, R.id.simple_class});// 設(shè)置分割線(xiàn)listView.setDivider(new ColorDrawable(Color.RED));// 設(shè)置分割線(xiàn)的寬度listView.setDividerHeight(5);listView.setAdapter(adapter);}
}
實(shí)現(xiàn)的效果圖
4??BaseAdapter 通用的是適配器,(一般都是自定義)
定義一個(gè)myAdapter
public class MyAdapter extends BaseAdapter {private List<ListBean> mDatas = null;private Context mContext = null;public MyAdapter(Context context, List<ListBean> datas) {mDatas = datas;mContext = context;}@Overridepublic int getCount() {return mDatas.size();}@Overridepublic Object getItem(int position) {return mDatas.get(position);}@Overridepublic long getItemId(int position) {return position;}@Overridepublic View getView(int position, View convertView, ViewGroup parent) {ViewHolder holder;if (convertView == null) {holder = new ViewHolder();convertView = LayoutInflater.from(mContext).inflate(R.layout.list_base_item, null);holder.image = convertView.findViewById(R.id.image);holder.title = convertView.findViewById(R.id.title);holder.content = convertView.findViewById(R.id.content);convertView.setTag(holder);} else {holder = (ViewHolder) convertView.getTag();}holder.image.setImageResource(mDatas.get(position).getImgId());holder.title.setText(mDatas.get(position).getTitle());holder.content.setText(mDatas.get(position).getContent());return convertView;}public final class ViewHolder {public ImageView image;public TextView title;public TextView content;}}
布局 list_base_item?
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="120dp"xmlns:app="http://schemas.android.com/apk/res-auto"><ImageViewandroid:id="@+id/image"android:layout_width="120dp"android:layout_height="match_parent"android:src="@color/colorAccent"app:layout_constraintLeft_toLeftOf="parent"app:layout_constraintTop_toTopOf="parent"app:layout_constraintBottom_toBottomOf="parent" /><TextViewandroid:id="@+id/title"android:layout_height="wrap_content"android:layout_width="wrap_content"android:text="標(biāo)題頭"app:layout_constraintLeft_toRightOf="@+id/image"app:layout_constraintTop_toTopOf="parent"android:layout_marginLeft="50dp" /><TextViewandroid:id="@+id/content"android:layout_height="wrap_content"android:layout_width="wrap_content"android:text="標(biāo)題頭"app:layout_constraintLeft_toRightOf="@+id/image"app:layout_constraintTop_toBottomOf="@+id/title"android:layout_marginTop="50dp"android:layout_marginLeft="50dp" />
</androidx.constraintlayout.widget.ConstraintLayout>
?activity 代碼如下
public class ListBaseAdapterActivity extends AppCompatActivity {@Overrideprotected void onCreate(@Nullable Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.simple_adapter_activity_layout);List<ListBean> list = new ArrayList<>();for (int i = 0; i < 20; i++) {ListBean listBean = new ListBean(R.mipmap.one, "標(biāo)題頭", "內(nèi)容內(nèi)容");list.add(listBean);}ListView listView = findViewById(R.id.list);MyAdapter adapter = new MyAdapter(ListBaseAdapterActivity.this, list);// 設(shè)置分割線(xiàn)listView.setDivider(new ColorDrawable(Color.RED));// 設(shè)置分割線(xiàn)的寬度listView.setDividerHeight(5);listView.setAdapter(adapter);}
}
實(shí)現(xiàn)的效果圖
代碼都狠簡(jiǎn)單就不多啰嗦了,
總結(jié)
以上是生活随笔為你收集整理的Android ListView (多个adapter 说明)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 育婴师多少钱一个月啊?
- 下一篇: Android ListView ite