package com.basic.security.fragment; import android.os.Bundle; import android.text.TextUtils; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.Button; import android.widget.ImageView; import android.widget.ListView; import android.widget.TextView; import com.basic.security.base.BaseFragment; import com.basic.security.manager.TimeManager; import com.basic.security.manager.TimeRuleManager; import com.basic.security.model.ModelAdapter; import com.basic.security.utils.ResolutionAdaptation; import com.basic.security.utils.SocketUtil; import com.basic.security.utils.ToastUtil; import com.basic.security.widget.ConfirmDialog; import org.androidannotations.annotations.AfterViews; import org.androidannotations.annotations.Click; import org.androidannotations.annotations.EFragment; import org.androidannotations.annotations.UiThread; import org.androidannotations.annotations.ViewById; import java.util.ArrayList; import java.util.List; @EFragment public class TimeRuleFragment extends BaseFragment { @ViewById Button time_rule_btn_add; @ViewById ListView time_rule_lv; private List isUseList = new ArrayList<>();// 启用此时间规则 1启用 ,0 禁用 private List timeRuleList = new ArrayList<>(); private ConfirmDialog confirmDialog; private TimeRuleAdapter timeRuleAdapter; public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { return inflater.inflate(ResolutionAdaptation.fragment_time_rule(), container, false); } @Click void time_rule_btn_add() { mainActivity().fragment_time_rule_add.getRuleData(null); showFragment(mainActivity().fragment_time_rule_add); } @AfterViews void init() { time_rule_lv.addHeaderView(View.inflate(getContext(), com.basic.security.utils.ResolutionAdaptation.time_rule_head(), null)); } public void show() { super.show(); timeRuleList = TimeManager.getAllTimeRule(); isUseList.clear(); for (ModelAdapter timeRule : timeRuleList) { isUseList.add(TextUtils.isEmpty(timeRule.getString("is_use")) ? "0" : timeRule.getString("is_use")); } timeRuleAdapter = new TimeRuleAdapter(); time_rule_lv.setAdapter(timeRuleAdapter); } public void hide() { super.hide(); if (mainActivity().currentFragment != mainActivity().fragment_time_rule) { if (confirmDialog != null) { confirmDialog.dismiss(); } } saveIsUse(); } // 在页面不显示时保存而不是点击后直接保存为了节约每次保存消耗的资源 // 在主线程中保存为了解决 Fatal signal 11 (SIGSEGV), code 2, fault addr 0x39663167 in tid 19898 (FinalizerDaemon) @UiThread public void saveIsUse() { for (int i = 0; i < timeRuleList.size(); i++) { timeRuleList.get(i).setString("is_use", isUseList.get(i)); TimeRuleManager.saveTimeRule(timeRuleList.get(i)); } } private class TimeRuleAdapter extends BaseAdapter { public int getCount() { return timeRuleList == null ? 0 : timeRuleList.size(); } public Object getItem(int position) { return timeRuleList.get(position); } public long getItemId(int position) { return position; } public View getView(int position, View convertView, ViewGroup parent) { ViewHolder viewHolder; if (convertView == null) { convertView = LayoutInflater.from(getContext()).inflate(com.basic.security.utils.ResolutionAdaptation.time_rule_item(), null); viewHolder = new ViewHolder(); viewHolder.name = convertView.findViewById(com.basic.security.utils.RUtils.R_id_time_rule_tv_name); viewHolder.edit = convertView.findViewById(com.basic.security.utils.RUtils.R_id_time_rule_iv_edit); viewHolder.delete = convertView.findViewById(com.basic.security.utils.RUtils.R_id_time_rule_iv_delete); viewHolder.use = convertView.findViewById(com.basic.security.utils.RUtils.R_id_btn_time_rule_able); convertView.setTag(viewHolder); } else { viewHolder = (ViewHolder) convertView.getTag(); } viewHolder.name.setText(timeRuleList.get(position).getString("time_rule_name")); viewHolder.edit.setOnClickListener(v -> { mainActivity().fragment_time_rule_add.getRuleData(timeRuleList.get(position)); showFragment(mainActivity().fragment_time_rule_add); }); viewHolder.delete.setOnClickListener((View v) -> { confirmDialog = new ConfirmDialog(mainActivity(), "确定要删除时间规则 " + timeRuleList.get(position).getString("time_rule_name") + " 吗?", "确认删除", "取消"); confirmDialog.show(); confirmDialog.setClickListener(new ConfirmDialog.ClickListenerInterface() { public void doConfirm() { // 从数据库中删除 ModelAdapter timeRule = timeRuleList.get(position); TimeManager.deleteOneTimeRule(timeRule); SocketUtil.rpcCallDeleteTimeRule(timeRule); confirmDialog.dismiss(); timeRuleList.remove(position); isUseList.remove(position); timeRuleAdapter.notifyDataSetChanged(); ToastUtil.show("删除成功"); } public void doCancel() { confirmDialog.dismiss(); } }); }); ViewHolder finalViewHolder = viewHolder; if ("1".equals(isUseList.get(position))) { viewHolder.use.setText("启用"); viewHolder.use.setBackgroundResource(com.basic.security.utils.RUtils.R_drawable_blue_button); } else { viewHolder.use.setText("禁用"); viewHolder.use.setBackgroundResource(com.basic.security.utils.RUtils.R_drawable_gray_button); } viewHolder.use.setOnClickListener(v -> { if ("1".equals(isUseList.get(position))) { isUseList.set(position, "0"); finalViewHolder.use.setText("禁用"); finalViewHolder.use.setBackgroundResource(com.basic.security.utils.RUtils.R_drawable_gray_button); } else { isUseList.set(position, "1"); finalViewHolder.use.setText("启用"); finalViewHolder.use.setBackgroundResource(com.basic.security.utils.RUtils.R_drawable_blue_button); } }); return convertView; } class ViewHolder { private TextView name; private ImageView edit, delete; private Button use; } } }