public class MainActivity extends AppCompatActivity implements ViewInter<MyBean>{
//ListView的控件名
private ListView mList;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mList = (ListView)findViewById(R.id.mList);
//开始向presenter层请求数据
new Presenter(this).load();
}
/**
* presenter层将数据通过接口回调把数据传递给这个方法
* 通过这个方法可以将数据项传递给适配器
*/
@Override
public void showData(List<MyBean> myBeen) {
MyAdapter adapter = new MyAdapter(myBeen);
mList.setAdapter(adapter);
}
}
/**
* view层所有的界面更新,请求数据等功能都写在此接口,方便扩展
*/
public interface ViewInter<T> {
void showData(List<T> t);
}
public class Presenter {
//view层的对象,主要调用其子类自身的方法,然后回传数据
ViewInter<MyBean> vi;
//model层的对象,主要调用其子类功能,实现数据获取
ModelInter mi;
/**
* 只需要传递view层的引用即可,model层的数据其由自身去处理
*/
public Presenter(ViewInter<MyBean> vi){
this.vi = vi;
mi = new ModelImp();
}
/**
* 该方法的主要功能就是负责数据的传递和通知处理数据
*/
public void load(){
//调用mi.getData方法,可以获取需要的数据,然后回调给view层
mi.getData(new ModelInter.DealData() {
@Override
public void setData() {
List<MyBean> data = new ArrayList<>();
for(int i = 0; i < 10; i++){
MyBean bean = new MyBean();
//这里是随机生成实体类中的数据,也就是设置复选框是否默认为选上状态
bean.setChecked(Math.random() > 0.5 ? true : false);
data.add(bean);
}
//回调传递数据
vi.showData(data);
}
});
}
}
/**
* 所有模型层的功能都可以写在此接口中,此接口方便扩展新功能
*/
public interface ModelInter {
void getData(DealData dealData);
public interface DealData{
void setData();
}
}
public class ModelImp implements ModelInter{
/**
* 实现数据的处理,方法中的参数是一个接口类型,所有传递过来的值都必须实现其定义的方法
*/
@Override
public void getData(DealData dealData) {
dealData.setData();
}
}
public class MyAdapter extends BaseAdapter implements CompoundButton.OnCheckedChangeListener {
//定义一个类似于map集合的对象,其效率会比map更高,用来保存复选框当前被用户点击后的状态
private SparseArray<Boolean> array;
private Context context;
private List<MyBean> data;
public MyAdapter(List<MyBean> data) {
this.data = data;
array = new SparseArray();
}
@Override
public int getCount() {
return data == null ? 0 : data.size();
}
@Override
public Object getItem(int i) {
return data.get(i);
}
@Override
public long getItemId(int i) {
return i;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
MyBean bean = data.get(position);
if (context == null)
context = parent.getContext();
ViewHolder holder = null;
if (convertView == null) {
convertView = LayoutInflater.from(parent.getContext()).inflate(R.layout.list_item, null);
holder = new ViewHolder();
holder.mTv = (TextView) convertView.findViewById(R.id.mTv);
holder.mCheck = (CheckBox) convertView.findViewById(R.id.mCheck);
convertView.setTag(holder);
}
holder = (ViewHolder) convertView.getTag();
holder.mTv.setText("复选框" + position);
//设置复选框的监听事件
holder.mCheck.setOnCheckedChangeListener(this);
holder.mCheck.setText("编程" + position);
//将对应位置设置到tag中
holder.mCheck.setTag(R.id.check, position);
//首先判断数据项中的数据是否为true,如果为true则设置其默认值
// if(data.get(position).isChecked()) //已注释
// holder.mCheck.setChecked(data.get(position).isChecked());//已注释
//将用户选择的状态保存到对应的item复选框上
// holder.mCheck.setChecked(array.get(position, false));//已注释
return convertView;
}
@Override
public void onCheckedChanged(CompoundButton compoundButton, boolean b) {
//每次触发事件的时候,都拿到对应item位置的值
// int i = (int) compoundButton.getTag(R.id.check);//已注释
//然后将状态保存到集合中
// array.put(i, b);//已注释
//并且修改数据项的值。
// data.get(i).setChecked(b);//已注释
}
static class ViewHolder {
TextView mTv;
CheckBox mCheck;
}
}
//数据项对象
public class MyBean {
boolean isChecked;
public boolean isChecked() {
return isChecked;
}
public void setChecked(boolean checked) {
isChecked = checked;
}
}
机械节能产品生产企业官网模板...
大气智能家居家具装修装饰类企业通用网站模板...
礼品公司网站模板
宽屏简约大气婚纱摄影影楼模板...
蓝白WAP手机综合医院类整站源码(独立后台)...苏ICP备2024110244号-2 苏公网安备32050702011978号 增值电信业务经营许可证编号:苏B2-20251499 | Copyright 2018 - 2025 源码网商城 (www.ymwmall.com) 版权所有