ListView(二)

Main:


public class MainActivity extends AppCompatActivity {

    private ListView mListView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        mListView = (ListView) findViewById(R.id.list_view_demo);
        //自定义的  活动项目类  作为该列表集合
        ArrayList<ActivityItem> activityItems = new ArrayList<>();
        //添加活动项目,对应名字和对应文件活动名.class
        activityItems.add(new ActivityItem("1. 异步请求数据列表", RequestDataActivity.class));
        activityItems.add(new ActivityItem("2. 模仿IM聊天布局", ChatActivity.class));
        //连接适配器(context,ArrayList<ActivityItem>)
        mListView.setAdapter(new MainListAdapter(MainActivity.this, activityItems));
    }
}
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin">

    <ListView
        android:id="@+id/list_view_demo"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="@color/white"
        >
    </ListView>
</RelativeLayout>

/*
MainListAdapter extends BindableAdapter<ActivityItem> extends BaseListAdapter<T> extends BaseAdapter
简型适配器
 */
public class MainListAdapter extends BindableAdapter<ActivityItem> {

    private Context mContext;

    //
    public MainListAdapter(Context context, List<ActivityItem> list) {
        super(context, list);
        mContext = context;

    }

    @Override//新建项目视图
    protected View onNewItemView(LayoutInflater inflater, ViewGroup parent, int position) {
        View view = inflater.inflate(R.layout.item_main_list, null);
        ViewHolder holder = new ViewHolder();
        holder.mTitle = (TextView) view.findViewById(R.id.title);
        view.setTag(holder);
        return view;
    }

    @Override//绑定项目视图
    protected void onBindItemView(View viewItem, final ActivityItem data, int position, ViewGroup parent) {
        ViewHolder holder = (ViewHolder) viewItem.getTag();
        holder.mTitle.setText(data.getName());
        //
        viewItem.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                mContext.startActivity(new Intent(mContext, data.getActivityClass()));
            }
        });
    }

    private class ViewHolder {
        private TextView mTitle;
    }
}
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:orientation="vertical"
              android:layout_width="match_parent"
              android:layout_height="match_parent">
    <TextView
        android:id="@+id/title"
        android:layout_width="wrap_content"
        android:layout_height="60dp"
        android:text="@string/app_name"
        android:minHeight="30dp"
        android:layout_centerVertical="true"
        android:gravity="center_vertical"
        android:textColor="#494949"
        android:layout_marginLeft="16dp"
        android:layout_toRightOf="@+id/breakfast_imageview"
        android:textSize="18sp"/>
</LinearLayout>
/*
活动项目类    名字、活动类
 */
public class ActivityItem {
    private String mName;
    private Class mActivityClass;

    //自定义类都最好构造构造函数设置传参类型
    public ActivityItem(String name, Class activityClass) {
        mName = name;
        mActivityClass = activityClass;
    }

    public String getName() {
        return mName;
    }

    public void setName(String name) {
        mName = name;
    }

    public Class getActivityClass() {
        return mActivityClass;
    }

    public void setActivityClass(Class activityClass) {
        mActivityClass = activityClass;
    }
}

/*
可绑定的适配器,继承于    BaseListAdapter<T>    extends BaseAdapter
 */
public abstract class BindableAdapter<T> extends BaseListAdapter<T> {

    public BindableAdapter(Context context) {
        super(context);
    }

    //环境,List<>
    public BindableAdapter(Context context, List<T> list) {
        super(context, list);
    }

    //获取下拉视图,新建+绑定
    @Override
    public final View getDropDownView(int position, View view, ViewGroup container) {
        if (view == null) {
            //新建下拉视图
            view = newDropDownView(LayoutInflater.from(getContext()), position, container);
            if (view == null) {
                throw new IllegalStateException("newDropDownView result must not be null.");//非法状态异常
            }
        }
        //绑定下拉视图
        bindDropDownView(getItem(position), position, view, container);
        return view;
    }

    //为指定位置  创建  下拉视图的新实例
    public View newDropDownView(LayoutInflater inflater, int position, ViewGroup container) {
        return onNewItemView(inflater, container, position);
    }

    //将指定{@code position}的数据  绑定  到下拉视图
    public void bindDropDownView(T item, int position, View view, ViewGroup container) {
        onBindItemView(view, item, position, container);
    }
}
=
/*
List基本适配器:

 */
public abstract class BaseListAdapter<T> extends BaseAdapter {
    private List<T> mList;
    private final Context mContext;

    public BaseListAdapter(Context context) {
        this.mContext = context;
    }

    public BaseListAdapter(Context context, List<T> list) {
        this.mContext = context;
        mList = list;
    }

    //获取环境上下文
    public Context getContext() {
        return mContext;
    }

    @Override
    public int getCount() {
        return mList != null ? mList.size() : 0;
    }

    @Override
    public T getItem(int position) {
        return mList != null ? mList.get(position) : null;
    }

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

    public void setData(List<T> list) {
        mList = list;
        //BaseAdapter的方法 :通知数据集已更改。
        notifyDataSetChanged();
    }

    public List<T> getList() {
        return mList;
    }


    //  得到View     位置,转换视图,viewgroup
    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        if (convertView == null) {
            //新建项目视图
            convertView = onNewItemView(LayoutInflater.from(mContext), parent, position);
        }
        //绑定项目视图
        onBindItemView(convertView, getItem(position), position, parent);
        return convertView;
    }

    //新建项目视图
    protected abstract View onNewItemView(LayoutInflater inflater, ViewGroup parent, int position);

    //绑定项目视图
    protected abstract void onBindItemView(View viewItem, T data, int position, ViewGroup parent);

    public void notifyDataSetChanged(List<T> mList) {
        this.mList = mList;
        notifyDataSetChanged();
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值