Android开发之ListView Adapter 模板

来源:互联网 发布:软件开发设计文档 编辑:程序博客网 时间:2024/06/08 09:35

如果不对 Adapter 的写法进行规范,开发人员还是会根据自己的习惯,写出各种各样的 Adapter,如:
- 很多开发人员都喜欢将 Adapter 内嵌在 Activity 中,一般会使用 SimpleAdapter。
- 由于没有使用实体,所以一般会把一个字典作为构造函数的参数注入到 Adapter 中。

效果图:
这里写图片描述

主布局文件:

<?xml version="1.0" encoding="utf-8"?><RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:tools="http://schemas.android.com/tools"    android:layout_width="match_parent"    android:layout_height="match_parent"    tools:context="com.gyq.studyapp.MainActivity">    <ListView        android:id="@+id/list_view"        android:layout_width="match_parent"        android:layout_height="match_parent"/></RelativeLayout>

item 布局文件:

<?xml version="1.0" encoding="utf-8"?><TextView xmlns:android="http://schemas.android.com/apk/res/android"    android:id="@+id/id_tv_title"    android:layout_width="match_parent"    android:layout_height="50dp"    android:background="#aa111111"    android:gravity="center_vertical"    android:paddingLeft="15dp"    android:textColor="#ffffff"    android:text="hello"    android:textSize="20sp"    android:textStyle="bold" ></TextView>

CinemaAdapter.java

import android.content.Context;import android.view.LayoutInflater;import android.view.View;import android.view.ViewGroup;import android.widget.BaseAdapter;import android.widget.TextView;import com.gyq.studyapp.R;import java.util.List;/** * Created by gyq on 2017/6/13 14:46 */public class CinemaAdapter extends BaseAdapter {    private List<String> mDatas;    private Context mContext;    private LayoutInflater mInflater;    public CinemaAdapter(List<String> datas, Context context) {        this.mDatas = datas;        this.mContext = context;        mInflater = LayoutInflater.from(context);    }    @Override    public int getCount() {        return mDatas.size();    }    @Override    public Object getItem(int position) {        return mDatas.get(position);    }    @Override    public long getItemId(int position) {        return position;    }    @Override    public View getView(int position, View convertView, ViewGroup parent) {        Holder holder = null;        if(convertView == null) {            holder = new Holder();            convertView = mInflater.inflate(R.layout.item_cinemalist,parent,false);            holder = new Holder();            holder.mTextView = (TextView)convertView.findViewById(R.id.id_tv_title);            convertView.setTag(holder);        }else {            holder = (Holder)convertView.getTag();        }        holder.mTextView.setText(mDatas.get(position));        return convertView;    }    private final class Holder {        TextView mTextView;    }}

MainActivity.java

package com.gyq.studyapp;import android.os.Bundle;import android.support.v7.app.AppCompatActivity;import android.view.View;import android.widget.AdapterView;import android.widget.ListView;import android.widget.Toast;import com.gyq.studyapp.adapter.CinemaAdapter;import java.util.ArrayList;import java.util.Arrays;import java.util.List;public class MainActivity extends AppCompatActivity {    private ListView mListView;    private List<String> mInfos;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        initData();        mListView = (ListView)findViewById(R.id.list_view);        CinemaAdapter adapter = new CinemaAdapter(mInfos,this);        mListView.setAdapter(adapter);        mListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {            @Override            public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {                //do something                Toast.makeText(MainActivity.this,"点击了"+i,Toast.LENGTH_SHORT).show();            }        });    }    private void initData() {        mInfos = new ArrayList<>(Arrays.asList("Hello","IOS","Android","Java"));    }}

2,万能的适配器
先给出鸿洋大神的 github 地址:万能的 Adapter

1,先在 app 文件夹下的 build.gradle 添加:

dependencies {    ...    compile 'com.zhy:base-adapter:3.0.3'}

2,使用:

import android.os.Bundle;import android.support.v7.app.AppCompatActivity;import android.view.View;import android.widget.AdapterView;import android.widget.ListView;import android.widget.Toast;import com.zhy.adapter.abslistview.CommonAdapter;import com.zhy.adapter.abslistview.ViewHolder;import java.util.ArrayList;import java.util.Arrays;import java.util.List;public class MainActivity extends AppCompatActivity {    private ListView mListView;    private List<String> mInfos;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        initData();        mListView = (ListView)findViewById(R.id.list_view);        mListView.setAdapter(new CommonAdapter<String>(this,R.layout.item_cinemalist,mInfos) {            @Override            protected void convert(ViewHolder viewHolder, String item, int position) {                viewHolder.setText(R.id.id_tv_title,item);            }        });        mListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {            @Override            public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) {                //do something                Toast.makeText(MainActivity.this,"点击了"+i,Toast.LENGTH_SHORT).show();            }        });    }    private void initData() {        mInfos = new ArrayList<>(Arrays.asList("Hello","IOS","Android","Java"));    }}

效果和开始的效果图是一样的。

附上demo:ListViewDemo

原创粉丝点击