ListView的标准写法
a.自定义组合控件写法:一堆相同的控件组合在一起,具有共性
b.抽取系统部分.写成一个XML文件
c.写一个类.继承根布局(LinearLayout、RelativeLayout、FrameLayout、ViewGroup)
d.重写两个构造方法.带一个参数context和带有两个参数.一个参数去调用两个参数的
e.在带有两个参数的构造方法里面,使用打气筒加载布局,给自己打气
View.inflate(context,R.layout.root,this);
f.定义自定义属性.在res/values/attrs.xml定义自定义属性
<!-- 为ProgressStateView添加自定义属性 -->
<declare-styleable name="ProgressStateView">
<attr name="psvText" format="reference|string" />
</declare-styleable>
g.在布局里面,先声明命名空间 xmlns:itheima:..../包名称
h.使用自定义控件,包名称+类名称. 自定义属性,以命名空间开头
<org.itheima.safe.view.ProgressStateView
android:id="@+id/am_psv_rom"
android:layout_width="match_parent"
android:layout_height="wrap_content"
itheima:psvText="内存:" />
i.在自定义控件Java类.构造方法里面.得到自定义属性值
// 设置属性值
TypedArray ta = context.obtainStyledAttributes(attrs,R.styleable.ProgressStateView);
String text = ta.getString(R.styleable.ProgressStateView_psvText);
ta.recycle();
代码()
private class MyAdpter extends BaseAdapter {
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder = null;
if (convertView == null) {
convertView = View.inflate(AppManageActivity.this,
R.layout.item_appmanage, null);
holder = new ViewHolder();
convertView.setTag(holder);
holder.ivIcoa = (ImageView) convertView
.findViewById(R.id.item_appManage_iv_img);
holder.tvName = (TextView) convertView
.findViewById(R.id.item_appManage_tv_title);
holder.tvSite = (TextView) convertView
.findViewById(R.id.item_appManage_tv_site);
holder.tvSize = (TextView) convertView
.findViewById(R.id.item_appManage_tv_size);
} else {
holder = (ViewHolder) convertView.getTag();
}
AppBean bean = mData.get(position);
holder.tvName.setText(bean.name);
holder.tvSite.setText(bean.isInstallSD ? "内存空间" : "SD卡空间");
holder.tvSize.setText(Formatter.formatFileSize(
AppManageActivity.this, bean.size));
return convertView;
}
public long getItemId(int position) {
return position;
}
public Object getItem(int position) {
if (mData != null) {
return mData.get(position);
}
return null;
}
public int getCount() {
if (mData != null) {
return mData.size();
}
return 0;
}
private class ViewHolder {
TextView tvName;
TextView tvSite;
TextView tvSize;
}
}