您的位置:首页 > 其它

复杂listView的adapter的优化

2015-12-03 13:01 603 查看
package com.study.mobilesafe.adapter;

import java.util.List;

import android.content.Context;
import android.graphics.Color;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.RelativeLayout;
import android.widget.TextView;

import com.study.mobilesafe.R;
import com.study.mobilesafe.db.dao.WatchDogDao;
import com.study.mobilesafe.domain.AppInfo;

public class AppsManagerAdapter extends BaseAdapter {

private List<AppInfo> userInfos;
private List<AppInfo> systemInfos;
private LayoutInflater inflater;
private Context context;
private WatchDogDao watchDogDao;

public AppsManagerAdapter(Context context, List<AppInfo> userInfos,
List<AppInfo> systemInfos) {

inflater = LayoutInflater.from(context);
this.userInfos = userInfos;
this.systemInfos = systemInfos;
this.context = context;
watchDogDao = new WatchDogDao(context);
}

@Override
public int getCount() {
return userInfos.size() + systemInfos.size() + 2;
}

@Override
public Object getItem(int position) {
// return infos.get(position);
return null;
}

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

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

if (position == 0) {
TextView tv_ueser_apps_count = new TextView(context);
tv_ueser_apps_count.setText("用户程序:(" + userInfos.size() + ")个");
tv_ueser_apps_count.setBackgroundColor(Color.GRAY);
return tv_ueser_apps_count;
} else if (position == userInfos.size() + 1) {
TextView tv_system_apps_count = new TextView(context);
tv_system_apps_count.setText("系统程序:(" + systemInfos.size() + ")个");
tv_system_apps_count.setBackgroundColor(Color.GRAY);
return tv_system_apps_count;
}
ViewHolder holder = null;
if (convertView != null && convertView instanceof RelativeLayout) {
holder = (ViewHolder) convertView.getTag();
} else {
holder = new ViewHolder();
convertView = inflater.inflate(R.layout.item_app_info, null);
holder.iv_app_icon = (ImageView) convertView
.findViewById(R.id.iv_app_icon);
holder.tv_app_name = (TextView) convertView
.findViewById(R.id.tv_app_name);
holder.tv_app_isRom = (TextView) convertView
.findViewById(R.id.tv_app_isRom);
holder.tv_app_version = (TextView) convertView
.findViewById(R.id.tv_app_version);
holder.iv_lock = (ImageView) convertView.findViewById(R.id.iv_lock);
convertView.setTag(holder);
}

AppInfo info;
if (position <= userInfos.size()) {
info = userInfos.get(position - 1);
} else {
info = systemInfos.get(position - userInfos.size() - 2);
}
holder.iv_app_icon.setImageDrawable(info.getIcon());// null.方法()
holder.tv_app_name.setText(info.getName());
if (info.isRom()) {
holder.tv_app_isRom.setText("手机内存");
} else {
holder.tv_app_isRom.setText("SD卡");
}
holder.tv_app_version.setText(info.getVersionName());
if (watchDogDao.queryIsLock(info.getPackageName())) {
holder.iv_lock.setImageResource(R.drawable.lock);
} else {
holder.iv_lock.setImageResource(R.drawable.unlock);
}
if (info.getPackageName().equals(context.getPackageName())) {
holder.iv_lock.setVisibility(View.INVISIBLE);
}else{
holder.iv_lock.setVisibility(View.VISIBLE);
}
return convertView;
}

class ViewHolder {
ImageView iv_app_icon;
TextView tv_app_name;
TextView tv_app_isRom;
TextView tv_app_version;
ImageView iv_lock;
}
}

运行效果:注意上面的TextView的显示。





调用的Activity写法:

private void listViewScroll() {
lv_apps_manager.setOnScrollListener(new OnScrollListener() {

// 当滑动状态改变的时候调用
@Override
public void onScrollStateChanged(AbsListView view, int scrollState) {

}

// 当listView滑动的时候调用 ---!!!第一次加载界面的时候触发了滑动事件
// --所以userInfos为空指针异常
@Override
public void onScroll(AbsListView view, int firstVisibleItem,
int visibleItemCount, int totalItemCount) {
if (userInfos != null && systemInfos != null) {
if (firstVisibleItem >= userInfos.size() + 1) {
tv_count.setText("系统程序(" + systemInfos.size() + ")个");
} else {
tv_count.setText("用户程序(" + userInfos.size() + ")个");
}
}

}
});
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: