最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Android實(shí)現(xiàn)手機(jī)聯(lián)系人分欄效果

 更新時間:2022年03月21日 14:44:48   作者:_陌陌  
這篇文章主要為大家詳細(xì)介紹了Android實(shí)現(xiàn)手機(jī)聯(lián)系人分欄效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下

本文實(shí)例為大家分享了Android實(shí)現(xiàn)手機(jī)聯(lián)系人分欄效果的具體代碼,供大家參考,具體內(nèi)容如下

小編在項(xiàng)目時期遇見了制作手機(jī)聯(lián)系人分欄效果,查詢了很多資料,現(xiàn)在總結(jié)如下:

添加的代碼并不多,用ListView寫好數(shù)據(jù)以后,只需在Adapter里添加一個方法,并且在getView()方法里添加幾行代碼即可。不過小編現(xiàn)在介紹的方法,只適合做簡單項(xiàng)目,大型項(xiàng)目還沒研究該代碼是否有缺陷,歡迎各位大神批評指教。

給大家看一下,小編做的代碼效果圖:

adapter具體代碼如下:

public class ContactAdapter extends BaseAdapter<ContactBeen>{
? ? ? private List<ContactBeen> contactBeens;
? ? ? private Context context;

? ? ? public ContactAdapter(Context context, List<ContactBeen> datas) {
? ? ? ? super(context, datas);
? ? ? ? this.context = context;
? ? ? ? contactBeens = datas;
? ? }

? @Override
? ? public View getView(int position, View convertView, ViewGroup parent) {

? ? ? ? ViewHodler viewHodler = null;
? ? ? ? if(convertView == null){
? ? ? ? ? ? convertView = inflater.inflate(R.layout.contact_item,parent,false);
? ? ? ? ? ? viewHodler = new ViewHodler(convertView);
? ? ? ? ? ? convertView.setTag(viewHodler);
? ? ? ? }else {
? ? ? ? ? ? viewHodler = (ViewHodler)convertView.getTag();
? ? ? ? }
? ? ? ? viewHodler.name.setText(contactBeens.get(position).getName());
? ? ? ? viewHodler.number.setText(contactBeens.get(position).getNumber());
? ? ? ? viewHodler.image.setmBitmap(Analysis(contactBeens.get(position).getImage()));

? ? ? ? // 獲得當(dāng)前聯(lián)系人名字的首字母。 其中:getAlpha()方法是自己寫的一個方法(具體介紹如下), contactBeens.get(position).getAlpha()中的getAlpha()是我定義的實(shí)體類的get方法,值為當(dāng)前聯(lián)系人的名字的拼音。
? ? ? ? String currentStr = getAlpha(contactBeens.get(position).getAlpha());
? ? ? ? // 獲得上一個聯(lián)系人名字的首字母
? ? ? ? String previewStr = (position - 1) >= 0 ? getAlpha(contactBeens.get(position - 1).getAlpha()) : " ";
? ? ? ? /**
? ? ? ? ?* 判斷顯示#、A-Z的TextView隱藏與可見
? ? ? ? ?*/
? ? ? ? if (!previewStr.equals(currentStr)) {
? ? ? ? ? ? viewHodler.alpha.setVisibility(View.VISIBLE);
? ? ? ? ? ? viewHodler.alpha.setText(currentStr);
? ? ? ? } else {
? ? ? ? //當(dāng)前聯(lián)系人與上一個聯(lián)系人首字母相同時,執(zhí)行下面代碼,隱藏alpha(這是我定義的textView)。
? ? ? ? ? ? viewHodler.alpha.setVisibility(View.GONE);
? ? ? ? }

? ? ? ? return convertView;
? ? }

? ? public class ViewHodler{

? ? ? ? private ContomImage image;
? ? ? ? private TextView name;
? ? ? ? private TextView number;
? ? ? ? private TextView alpha;

? ? ? ? public ViewHodler(View view) {

? ? ? ? ? ? image = (ContomImage) view.findViewById(R.id.contact_contomImage);
? ? ? ? ? ? name = (TextView) view.findViewById(R.id.contact_name);
? ? ? ? ? ? number = (TextView) view.findViewById(R.id.contact_number);
? ? ? ? ? ? alpha = (TextView) view.findViewById(R.id.alpha);
? ? ? ? }
? ? }

? ? ?//通過聯(lián)系人的名字str ,返回聯(lián)系人名字的首字母大寫
? ? @NonNull
? ? private String getAlpha(String str) {
? ? ? ? if (str == null) {
? ? ? ? ? ? return "#";
? ? ? ? }

? ? ? ? if (str.trim().length() == 0) {
? ? ? ? ? ? return "#";
? ? ? ? }

? ? ? ? char c = str.trim().substring(0, 1).charAt(0);

? ? ? ? //判斷首字母是否是英文字母
? ? ? ? if (('a' <= c && c <= 'z') || ('A' <= c && c <= 'Z')) {
? ? ? ? ? ? return (c + "").toUpperCase(); // 大寫輸出
? ? ? ? } else {
? ? ? ? ? ? return "#";
? ? ? ? }

? ? }
}

適配器代碼解釋如下:

List contactBeens 數(shù)據(jù),是從適配器的構(gòu)造方法傳過來的。數(shù)據(jù)是根據(jù)Cursor一條一條的從虛擬機(jī)的聯(lián)系人數(shù)據(jù)庫讀出來的。
在適配器代碼中有多處出現(xiàn)getAlpha(),這個getAlpha()有兩個含義:

getAlpha(contactBeens.get(position).getAlpha()); 解釋: 從左邊開始,第一次出現(xiàn)的getAlpha()是代碼中最后定義的方法,是自己寫的一個方法。 第二次出現(xiàn)的getAlpha()是實(shí)體類里的get方法,

現(xiàn)在來看一下,ContactBeen這個實(shí)體類里的成員變量:

public class ContactBeen {

? ? private String name;
? ? private String number;
? ? private Uri image;
? ? //該變量存儲從虛擬機(jī)里讀出來的每個聯(lián)系人的名字的拼音
? ? private String alpha;

? ? .... ?//剩下的為上述變量的get 和 ?set方法 以及該類的構(gòu)造方法, 這里就不一一寫出來了。
}

到這里為止,已經(jīng)實(shí)現(xiàn)了小編今天要說的手機(jī)聯(lián)系人分欄效果。如果有任何問題,給我留言,看見了一一答復(fù),歡迎各位大神批評指教。

在這里,小編再給大家展示 : 如何從虛擬機(jī)中獲取手機(jī)聯(lián)系人的方法:

ContentResolver resolver1 = context.getContentResolver();
Cursor cursor1 ?= resolver1.query(uri,null,null,null,"sort_key");
? if(cursor1 != null && cursor1.moveToFirst()){

? ? ? ?int indexName = cursor1.getColumnIndex(Phone.DISPLAY_NAME);
? ? ? ?int indexNumber = cursor1.getColumnIndex(Phone.NUMBER);
? ? ? ?int indexId = cursor1.getColumnIndex(Phone.CONTACT_ID);
? ? ? ?int indexPhoneId = cursor1.getColumnIndex(Phone.PHOTO_ID);
? ? ? ?int indexAlpha = ?cursor1.getColumnIndex("sort_key");//"sort_key"保存的是聯(lián)系人名字的拼音字母

? ? ? ? ? ? ? ? ? ? Uri uri1 = null;
? ? ? ? ? ? ? ? ? ? do {

? ? ? ? ? ? ? ? ? ? ? ? String name = cursor1.getString(indexName);
? ? ? ? ? ? ? ? ? ? ? ? String number = cursor1.getString(indexNumber);
? ? ? ? ? ? ? ? ? ? ? ? Long contactId = cursor1.getLong(indexId);
? ? ? ? ? ? ? ? ? ? ? ? Long phoneId = cursor1.getLong(indexPhoneId);
? ? ? ? ? ? ? ? ? ? ? ? String alpha = cursor1.getString(indexAlpha);
? ? ? ? ? ? ? ? ? ? ? ? if(phoneId > 0){

? ? ? ? ? ? ? ? ? ? ? ? ? ? uri1 = ContentUris.withAppendedId(Contacts.CONTENT_URI,contactId);

? ? ? ? ? ? ? ? ? ? ? ? }else {
? ? ? ? ? ? ? ? ? ? ? ? ? ? uri1 = null ;
? ? ? ? ? ? ? ? ? ? ? ? }

? ? ? ? ? ? ? ? ? ? ? ? ContactBeen been = new ContactBeen(name,number,uri1,alpha);
? ? ? ? ? ? ? ? ? ? ? ? Log.d(TAG, "name : "+ name + " number : " + number + " uri1 : " + uri1 + ?"alpha :" + alpha );
? ? ? ? }while (cursor1.moveToNext());

? ?cursor1.close();
}

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Java語言讀取配置文件config.properties的方法講解

    Java語言讀取配置文件config.properties的方法講解

    今天小編就為大家分享一篇關(guān)于Java語言讀取配置文件config.properties的方法講解,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-03-03
  • Kotlin協(xié)程Flow生命周期及異常處理淺析

    Kotlin協(xié)程Flow生命周期及異常處理淺析

    這篇文章主要為大家介紹了Kotlin協(xié)程Flow生命周期及異常處理淺析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-11-11
  • Android 設(shè)置Edittext獲取焦點(diǎn)并彈出軟鍵盤

    Android 設(shè)置Edittext獲取焦點(diǎn)并彈出軟鍵盤

    本文主要介紹了Android設(shè)置Edittext獲取焦點(diǎn)并彈出軟鍵盤的實(shí)現(xiàn)代碼。具有很好的參考價值。下面跟著小編一起來看下吧
    2017-04-04
  • Android ScreenLockReceiver監(jiān)聽鎖屏功能示例

    Android ScreenLockReceiver監(jiān)聽鎖屏功能示例

    這篇文章主要介紹了Android ScreenLockReceiver監(jiān)聽鎖屏功能,結(jié)合實(shí)例形式分析了Android監(jiān)聽鎖屏及取消監(jiān)聽功能的具體實(shí)現(xiàn)技巧,需要的朋友可以參考下
    2017-07-07
  • Flutter 控制屏幕旋轉(zhuǎn)的實(shí)現(xiàn)

    Flutter 控制屏幕旋轉(zhuǎn)的實(shí)現(xiàn)

    這篇文章主要介紹了Flutter 控制屏幕旋轉(zhuǎn)的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-09-09
  • Android開發(fā)SavedState?Jetpack狀態(tài)保存利器

    Android開發(fā)SavedState?Jetpack狀態(tài)保存利器

    這篇文章主要為大家介紹了Android開發(fā)SavedState?Jetpack狀態(tài)保存利器使用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-08-08
  • Android開發(fā)設(shè)置RadioButton點(diǎn)擊效果的方法

    Android開發(fā)設(shè)置RadioButton點(diǎn)擊效果的方法

    這篇文章主要介紹了Android開發(fā)設(shè)置RadioButton點(diǎn)擊效果的方法,詳細(xì)分析了Android開發(fā)中RadioButton屬性功能及相關(guān)設(shè)置技巧,需要的朋友可以參考下
    2017-06-06
  • 解析Android開發(fā)中多點(diǎn)觸摸的實(shí)現(xiàn)方法

    解析Android開發(fā)中多點(diǎn)觸摸的實(shí)現(xiàn)方法

    多點(diǎn)觸摸(MultiTouch),指的是允許計算機(jī)用戶同時通過多個手指來控制圖形界面的一種技術(shù)。與多點(diǎn)觸摸技術(shù)相對應(yīng)的就是單點(diǎn)觸摸,單點(diǎn)觸摸的設(shè)備已經(jīng)有很多年了,小尺寸的有觸摸式的手機(jī),大尺寸的最常見的就是銀行里的ATM機(jī)和排隊(duì)查詢機(jī)等等
    2013-05-05
  • Android網(wǎng)絡(luò)判斷知識小結(jié)

    Android網(wǎng)絡(luò)判斷知識小結(jié)

    本文通過兩段實(shí)例代碼分別給大家介紹Android中判斷當(dāng)前網(wǎng)絡(luò)是否可用和Android 關(guān)于判斷應(yīng)用是否有網(wǎng)絡(luò)的相關(guān)知識,對android網(wǎng)絡(luò)判斷相關(guān)知識感興趣的朋友一起學(xué)習(xí)吧
    2015-12-12
  • Android仿微信微博多圖展示效果

    Android仿微信微博多圖展示效果

    這篇文章主要為大家詳細(xì)介紹了Android仿微信微博多圖展示效果,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-02-02

最新評論

涪陵区| 赤壁市| 北安市| 庆云县| 丰顺县| 抚顺县| 沙湾县| 万源市| 广元市| 恩平市| 读书| 邹城市| 庆元县| 沾益县| 龙江县| 巩留县| 石狮市| 和静县| 兴城市| 洪江市| 兴宁市| 探索| 呼伦贝尔市| 永修县| 白水县| 禄劝| 青州市| 隆安县| 蒙自县| 左云县| 木兰县| 调兵山市| 深圳市| 吴桥县| 迁西县| 新民市| 商丘市| 临朐县| 上栗县| 金湖县| 延庆县|