杂记:万能adapter和应用锁主界面布局

万能adapter类CommonAdapter

import android.content.Context;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;

import com.example.ju.apklock.R;

import java.util.List;

/**
 * Created by ju on 2018/4/13.
 */
public abstract class CommonAdapter<T> extends BaseAdapter {
    private Context context;
    private List<T> list;
    public CommonAdapter(Context context, List<T> list) {
        this.context = context;
        this.list = list;
    }

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

    @Override
    public T getItem(int position) {
        return list.get(position);
    }

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

    @Override
    public View getView(int i, View view, ViewGroup viewGroup) {
        ViewHolder holder = ViewHolder.get(view,viewGroup, R.layout.apklistview_item,i);
        convert(holder,getItem(i));
        return holder.getConvertView();
    }

    public abstract void convert(ViewHolder holder,T item);
}

CommonAdapter中对应的ViewHolder

import android.content.Context;
import android.graphics.Bitmap;
import android.util.SparseArray;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;

import com.bumptech.glide.Glide;
import com.example.ju.apklock.R;

/**
 * Created by ju on 2018/4/13.
 */
public class ViewHolder {

    //现在对于int作为键的官方推荐用SparseArray替代HashMap
    private final SparseArray<View> views;
    private int position;
    private View convertView;
    private Context context;

    private ViewHolder(Context context, ViewGroup parent, int layoutId, int position) {
        this.context = context;
        this.views = new SparseArray<>();
        this.convertView = LayoutInflater.from(parent.getContext()).inflate(layoutId, parent, false);
        convertView.setTag(this);
    }

    /**
     * 拿到一个ViewHolder对象
     */
    public static ViewHolder get(View convertView, ViewGroup parent, int layoutId, int position) {
        if (convertView == null) {
            return new ViewHolder(parent.getContext(), parent, layoutId, position);
        }
        return (ViewHolder) convertView.getTag();
    }

    /**
     * 通过控件的Id获取对于的控件,如果没有则加入views
     */
    public <T extends View> T getView(int viewId) {
        View view = views.get(viewId);
        if (view == null) {
            view = convertView.findViewById(viewId);
            views.put(viewId, view);
        }
        return (T) view;
    }

    public View getConvertView() {
        return convertView;
    }

    /**
     * 设置字符串
     */
    public ViewHolder setText(int viewId, String text) {
        TextView tv = getView(viewId);
        tv.setText(text);
        return this;
    }

    /**
     * 设置图片
     */
    public ViewHolder setImageResource(int viewId, int drawableId) {
        ImageView iv = getView(viewId);
        iv.setImageResource(drawableId);
        return this;
    }

    /**
     * 设置图片
     */
    public ViewHolder setImageBitmap(int viewId, Bitmap bitmap) {
        ImageView iv = getView(viewId);
        iv.setImageBitmap(bitmap);
        return this;
    }

    /**
     * 设置图片
     */
    public ViewHolder setImageByUrl(int viewId, String url) {
        Glide.with(context).load(R.drawable.maoa).into((ImageView) getView(viewId));
        //        ImageLoader.getInstance().init(ImageLoaderConfiguration.createDefault(context));
        //        ImageLoader.getInstance().displayImage(url, (ImageView) getView(viewId));
        return this;
    }

    public int getPosition() {
        return position;
    }

}

在界面中的使用方式及利用此方式实现应用锁布局

import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.ListView;

import com.example.ju.apklock.Util.CommonAdapter;
import com.example.ju.apklock.Util.ProgramData;
import com.example.ju.apklock.Util.ViewHolder;

import java.util.ArrayList;
import java.util.List;

/**
 * A placeholder fragment containing a simple view.
 */
public class MainFragment extends Fragment {
    private ListView listView;
    private List<ProgramData> list;
    public MainFragment() {
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        View rootView = inflater.inflate(R.layout.fragment_main, container, false);
        listView = (ListView) rootView.findViewById(R.id.listView);
        initList();
        listView.setAdapter(new CommonAdapter<ProgramData>(getActivity(),list) {
            @Override
            public void convert(ViewHolder holder, ProgramData item) {
                holder.setText(R.id.item_name,item.getName());
                if(item.getImageUrl()!=null){
                    holder.setImageByUrl(R.id.item_picture,item.getImageUrl());
                }else{
                    holder.setImageResource(R.id.item_picture,item.getImageID());
                }
                if(item.islock()){
                    holder.setImageResource(R.id.item_islock,R.drawable.lock);
                }else{
                    holder.setImageResource(R.id.item_islock,R.drawable.unlock);
                }
            }
        });

        listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                ProgramData data = list.get(position);
                data.setIslock(!data.islock());
                View iview = listView.getChildAt(position-listView.getFirstVisiblePosition());//由于复用机制必须先计算实际内存中的posion
                ViewHolder holder = (ViewHolder) iview.getTag();
                if(data.islock()){
                    holder.setImageResource(R.id.item_islock,R.drawable.lock);
                }else{
                    holder.setImageResource(R.id.item_islock,R.drawable.unlock);
                }
            }
        });
        return rootView;
    }
    private void initList() {
        list = new ArrayList<>();
        for (int i = 0; i < 10; i++) {
            list.add(new ProgramData("程序 "+(i+1),R.drawable.maoa));//初始化数据源
        }
    }
}

programData类的实现方式如下,可根据填充数据需要自行定义。

/**
 * Created by ju on 2018/4/13.
 */
public class ProgramData {
    private String name;
    private String ImageUrl;
    private int ImageID;
    private boolean islock;

    public ProgramData(String name,String ImageUrl){
        this.name = name;
        this.ImageUrl = ImageUrl;
    }

    public ProgramData(String name,int ImageID){
        this.name = name;
        this.ImageID = ImageID;
    }

    public String getImageUrl() {
        return ImageUrl;
    }

    public void setImageUrl(String imageUrl) {
        this.ImageUrl = imageUrl;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getImageID(){
        return ImageID;
    }

    public void setImageID(int ImageID){
        this.ImageID = ImageID;
    }

    public boolean islock() {
        return islock;
    }

    public void setIslock(boolean islock) {
        this.islock = islock;
    }
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值