Android開發(fā)之簡單通訊錄(BaseAdapter)

讓ListView更強大的BaseAdapter

  • 上一篇文章中的例子我們使用了ArrayAdapter作為數(shù)據(jù)與ListView的橋梁,完成將數(shù)據(jù)加載到ListView的功能。但展示出來的列表(子項)數(shù)據(jù)顯得太過單調,沒有一個子項該有的復雜。例如我們想要一個子項顯示一個聯(lián)系人信息,那它必然包含頭像、姓名、聯(lián)系電話等詳細信息。那我們如何實現(xiàn)這一功能呢,答案很明顯,我們需要用到BaseAdapter來自定義一個適配器。

BaseAdapter是什么?

  • BaseAdapter是Android應用程序中經常用到的基礎數(shù)據(jù)適配器的基類,它實現(xiàn)了Adapter接口。它可以將一組數(shù)據(jù)傳到ListView顯示組件進行顯示。使用BaseAdapter主要是通過繼承此類來實現(xiàn)BaseAdapter的四個方法:
    public int getCount(): 適配器中數(shù)據(jù)集的數(shù)據(jù)個數(shù)。
    public Object getItem(int position): 獲取數(shù)據(jù)集中與索引對應的數(shù)據(jù)項。
    public long getItemId(int position): 獲取指定行對應的ID。
    public View getView(int position,View convertView,ViewGroup parent): 獲取每一行Item的顯示內容。

利用BaseAdapter完成簡單通訊錄

  • 我們準備完成的功能:
  1. 創(chuàng)建自定適配器MyAdapter繼承自BaseAdapter,重寫上述四個方法。在getView()方法中綁定布局,設置內容。
  2. 在主活動頁面顯示已定義好聯(lián)系人數(shù)據(jù)。
  3. 可以手動增加聯(lián)系人到列表中。
  • 創(chuàng)建自定義適配器MyAdapter。
    關鍵代碼如下:
public class MyAdapter extends BaseAdapter {

    private LayoutInflater layoutInflater;
    private Context mcontext;
    private List<Person> personlist;

    public MyAdapter (Context context, List<Person> list) {
        layoutInflater = LayoutInflater.from(context);
        this.mcontext = context;
        this.personlist = list;
    }

    @Override
    public int getCount() {
        return personlist.size();
    }

    @Override
    public Object getItem(int position) {
        return position;
    }

    @Override
    public long getItemId(int position) {
        return position;
    }

    public View getView(int position, View convertView, ViewGroup parent) {
        View view;

        if (convertView == null) {
            view = layoutInflater.inflate(R.layout.person_information, null);
        }
        else{
            view = convertView;
        }

        //綁定布局
        TextView textView = (TextView)view.findViewById(R.id.text_name);
        TextView textView1 = (TextView)view.findViewById(R.id.text_phonenumber);
        ImageView imageView = (ImageView)view.findViewById(R.id.image);
        //設置內容
        textView.setText(personlist.get(position).getName());
        textView1.setText(personlist.get(position).getPhonenum());
        imageView.setImageResource(personlist.get(position).getImageId());

        return view;
    }
}
一些說明
  1. public MyAdapter (Context context, List<Person> list)這是MyAdapter的有參構造方法,用于獲取獲取context和list對象。其中第一個參數(shù)傳入上下文,第二個參數(shù)傳入適配數(shù)據(jù)集合,這里我們傳入一個List集合(其中包含聯(lián)系人數(shù)據(jù))。
    LayoutInflater是自定義適配器常用的一個類,它的作用類似于findViewById()。不同點是LayoutInflater是用來找layout下的xml布局文件,并且實例化。
  2. public View getView(int position, View convertView, ViewGroup parent)用來獲取每一行Item所需的數(shù)據(jù)。
  • 第二個功能和第三個功能我們放在一起實現(xiàn),他們都定義在MainActivity中。
    定義一些初始化聯(lián)系人數(shù)據(jù),代碼如下:
private void getData() {
        Person p1 = new Person("jjj", "223253", R.drawable.banana_pic);
        Person p2 = new Person("高老板", "12534315", R.drawable.apple_pic);
        Person p3 = new Person("蛤", "23454353", R.drawable.mango_pic);
        Person p4 = new Person("hk", "223245342", R.drawable.strawberry_pic);
        Person p5 = new Person("齊", "46543", R.drawable.pear_pic);
        Person p6 = new Person("ppn", "456546", R.drawable.banana_pic);

        personList.add(p1);
        personList.add(p2);
        personList.add(p3);
        personList.add(p4);
        personList.add(p5);
        personList.add(p6);
    }

點擊按鈕,添加聯(lián)系人到ListView列表中,代碼如下:

 button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                String name = editText1.getText().toString();
                String number = editText2.getText().toString();

                Person p7 = new Person(name, number, R.drawable.pineapple_pic);
                personList.add(p7);
            }
        });
一些說明
  1. Person p1 = new Person("jjj", "223253", R.drawable.banana_pic);Person是我們自定義的一個類,用于存儲聯(lián)系人姓名、電話號碼、頭像ID。它的具體代碼在最后給出。
  2. personList.add(p1);personlist是實例化的一個集合,通過add()方法可以將每個聯(lián)系人對象添加到此集合中,用于傳參。

我們來看一看具體實現(xiàn)效果

  • 初始界面如下:


    初始化界面
  • 添加聯(lián)系人成功后:


    添加聯(lián)系人

Github地址

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容