复杂listView的adapter的优化

来源:互联网 发布:tensorflow java 编辑:程序博客网 时间:2024/05/18 00:58
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);}@Overridepublic int getCount() {return userInfos.size() + systemInfos.size() + 2;}@Overridepublic Object getItem(int position) {// return infos.get(position);return null;}@Overridepublic long getItemId(int position) {return position;}@Overridepublic 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() {// 当滑动状态改变的时候调用@Overridepublic void onScrollStateChanged(AbsListView view, int scrollState) {}// 当listView滑动的时候调用 ---!!!第一次加载界面的时候触发了滑动事件// --所以userInfos为空指针异常@Overridepublic 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() + ")个");}}}});}

0 0
原创粉丝点击