Android適配器(Adapter)的概念與自定義
一、什么是適配器
在常見軟件中,往往能看到列表一樣的信息流,例如:

如果在xml中將信息寫死,那顯然是不合適的,無法做到上拉刷新的效果。
這個時候,就需要用到適配器。

Android中有很多的適配器,首先看看這些適配器的繼承結(jié)構(gòu)

這些適配器中,BaseAdapter用的最多,也用的最熟
二、Adapter基本概念和繼承關(guān)系

三、自定義適配器實例
1.文件結(jié)構(gòu)

2.xml內(nèi)容
main.xml:
<?xml version="1.0" encoding="utf-8"?>
<ListView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/listview"
android:layout_height="match_parent"
android:layout_width="match_parent"
android:orientation="vertical">
</ListView>
listview_item.xml:
<?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="100dp"
android:gravity="center_vertical"
android:orientation="horizontal"
android:padding="15dp">
<ImageView
android:id="@+id/img_icon"
android:layout_width="130dp"
android:layout_height="80dp"
android:src="@mipmap/news"/>
<RelativeLayout
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginLeft="20dp"
android:layout_weight="1">
<TextView
android:id="@+id/tv_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:text="我是一個新聞標(biāo)題---- 1"
android:textColor="#000000"
android:textSize="18dp" />
<TextView
android:id="@+id/tv_content"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:text="我是新聞內(nèi)容---- 1"
android:textColor="#000000"
android:textSize="14dp" />
</RelativeLayout>
</LinearLayout>
3.java內(nèi)容
MainActivity
package cn.edu.cdut.testadapter;
import androidx.appcompat.app.AppCompatActivity;
import android.content.Context;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ListView;
import android.widget.Toast;
import java.util.LinkedList;
import java.util.List;
public class MainActivity extends AppCompatActivity {
private List<News> mData = null;
private Context mContext;
private NewsAdapter mAdapter = null;
private ListView listView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mContext = this;
listView = (ListView) findViewById(R.id.listview);
mData = new LinkedList<News>();
for (int i = 0; i < 10; i++) {
mData.add(new News("我是一個新聞標(biāo)題---- " + i, "我是一個新聞內(nèi)容---- " + i, R.mipmap.news));
}
mAdapter = new NewsAdapter(mData, mContext);
listView.setAdapter(mAdapter);
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int
position, long id) {
Toast.makeText(mContext, "點擊了第" + position + "條數(shù)據(jù)",
Toast.LENGTH_SHORT).show();
}
});
}
}
News.java
package cn.edu.cdut.testadapter;
public class News {
private String title;
private String content;
private int aIcon;
public News() {
}
public News(String title, String content, int aIcon) {
this.title = title;
this.content = content;
this.aIcon = aIcon;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
public int getaIcon() {
return aIcon;
}
public void setaIcon(int aIcon) {
this.aIcon = aIcon;
}
}
NewsAdapter
package cn.edu.cdut.testadapter;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;
import java.util.List;
public class NewsAdapter extends BaseAdapter {
private List<News> mData;
private Context mContext;
public NewsAdapter(List<News> mData, Context mContext) {
this.mData = mData;
this.mContext = mContext;
}
@Override
public int getCount() {
return mData.size();
}
@Override
public Object getItem(int position) {
return mData.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
convertView =
LayoutInflater.from(mContext).inflate(R.layout.listview_item,
parent, false);
ImageView img_icon = (ImageView)
convertView.findViewById(R.id.img_icon);
TextView title = (TextView)
convertView.findViewById(R.id.tv_title);
TextView content = (TextView)
convertView.findViewById(R.id.tv_content);
img_icon.setBackgroundResource(mData.get(position).getaIcon());
title.setText(mData.get(position).getTitle());
content.setText(mData.get(position).getContent());
return convertView;
}
}
四、參考資料
https://gitee.com/hwdroid/HelloWorld
總結(jié)
到此這篇關(guān)于Android適配器(Adapter)的概念與自定義的文章就介紹到這了,更多相關(guān)Android適配器Adapter內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
ubuntu 12.10 上 android 編譯環(huán)境搭建的深入解析
本篇文章是對ubuntu 12.10上android 編譯環(huán)境的搭建進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-06-06
Android編程開發(fā)實現(xiàn)多線程斷點續(xù)傳下載器實例
這篇文章主要介紹了Android編程開發(fā)實現(xiàn)多線程斷點續(xù)傳下載器,涉及Android多線程,文件傳輸及斷點續(xù)傳的相關(guān)技巧,需要的朋友可以參考下2016-01-01
Android游戲開發(fā)學(xué)習(xí)①彈跳小球?qū)崿F(xiàn)方法
這篇文章主要介紹了Android游戲開發(fā)學(xué)習(xí)①彈跳小球?qū)崿F(xiàn)方法,涉及Android通過物理引擎BallThread類模擬小球運動的相關(guān)技巧,具有一定參考借鑒價值,需要的朋友可以參考下2015-10-10
Presenting?Streams?in?Flutter小技巧
這篇文章主要為大家介紹了Presenting?Streams?in?Flutter小技巧示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-12-12
SwipeRefreshLayout+RecyclerView實現(xiàn)上拉刷新和下拉刷新功能
這篇文章主要介紹了SwipeRefreshLayout+RecyclerView實現(xiàn)上拉刷新和下拉刷新功能,具有一定的參考價值,感興趣的小伙伴們可以參考一下2019-01-01
Android自定義ViewGroup實現(xiàn)堆疊頭像的點贊Layout
這篇文章主要介紹了 Android自定義ViewGroup實現(xiàn)堆疊頭像的點贊Layout,具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-10-10
android系統(tǒng)按鍵音framework流程源碼詳細(xì)解析
這篇文章主要為大家詳細(xì)介紹了android系統(tǒng)按鍵音framework流程源碼,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-08-08

