package safeluck.drive.evaluation.fragment; import android.content.Context; import android.os.AsyncTask; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.text.Editable; import android.text.InputType; import android.text.TextUtils; import android.text.TextWatcher; import android.util.Log; import android.view.KeyEvent; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.view.inputmethod.EditorInfo; import android.widget.BaseAdapter; import android.widget.CheckBox; import android.widget.CompoundButton; import android.widget.EditText; import android.widget.LinearLayout; import android.widget.ListView; import android.widget.TextView; import android.widget.Toast; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.appcompat.widget.Toolbar; import androidx.lifecycle.Observer; import androidx.lifecycle.ViewModelProviders; import com.anyun.exam.lib.AYSdk; import com.anyun.exam.lib.MyLog; import com.google.gson.Gson; import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Set; import me.yokeyword.fragmentation.SupportFragment; import safeluck.drive.evaluation.Constant; import safeluck.drive.evaluation.DB.signalConfigdb.SignalConfigViewModel; import safeluck.drive.evaluation.DB.signalConfigdb.SingalConfig; import safeluck.drive.evaluation.R; import safeluck.drive.evaluation.bean.SignalConfigBean; import safeluck.drive.evaluation.bean.SignalConfigRemote; import safeluck.drive.evaluation.util.Utils; /** * MyApplication2 * Created by lzw on 2019/3/27. 17:29:43 * 邮箱:632393724@qq.com * All Rights Saved! Chongqing AnYun Tech co. LTD */ public class SignalConfigFragment extends SupportFragment { private static final int INDEX = 1; private static final int HIGHLEVEL = 2; private static final int MAINBOARD = 3; private Handler handler = new Handler(){ @Override public void handleMessage(Message msg) { super.handleMessage(msg); int id = msg.arg1; int sig = msg.arg2; switch (msg.what){ case INDEX: signalConfigViewModel.updateindex(sig,id); break; case HIGHLEVEL: break; case MAINBOARD: break; } } }; private List signalConfiglist =new ArrayList<>(); List list = new ArrayList<>();//要发送给remoteservice的信号配置,有可能发不出去 private Toolbar mToobar; private ListView listView; private LinearLayout linearLayout; private static final String TAG = SignalConfigFragment.class.getSimpleName(); SignalConfigViewModel signalConfigViewModel; public static SupportFragment newInstance(){ return new SignalConfigFragment(); } @Nullable @Override public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { View view = inflater.inflate(R.layout.layout_signal_config,container,false); initView(view); return view; } private void initView(View view) { mToobar = view.findViewById(R.id.toolbar); mToobar.setNavigationIcon(getResources().getDrawable(R.drawable.ic_arrow_back_white_24dp,null)); linearLayout = view.findViewById(R.id.ll_container); mToobar.setNavigationOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { _mActivity.onBackPressed(); } }); mToobar.setTitle("信号配置"); listView =new ListView(_mActivity); ViewGroup.LayoutParams layoutParams = new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT); ViewGroup.LayoutParams layoutParams1 = new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT); listView.setLayoutParams(layoutParams); linearLayout.addView(listView); listView.setDivider(null); final MySignalsAdapter mySignalsAdapter = new MySignalsAdapter(_mActivity); signalConfigViewModel = ViewModelProviders.of(this).get(SignalConfigViewModel.class); signalConfigViewModel.getSignalConfigs().observe(this, new Observer>() { @Override public void onChanged(List singalConfigs) { list.clear(); signalConfiglist.clear(); MyLog.i(TAG,"信号配置发生变化"); for (int i = 0; i < singalConfigs.size(); i++) { SignalConfigRemote signalConfigRemote = new SignalConfigRemote(); signalConfigRemote.setFunc_id(i); signalConfigRemote.setGpio_num(singalConfigs.get(i).getIndex()); signalConfigRemote.setLevel(singalConfigs.get(i).getHighLevel()); list.add(signalConfigRemote); } for (int i = 0; i < singalConfigs.size(); i++) { SingalConfig singalConfig = singalConfigs.get(i); i++; SingalConfig singalConfig1 = singalConfigs.get(i); signalConfiglist .add(new SignalConfigBean(singalConfig.getSignalName(),singalConfig1.getSignalName(),singalConfig.getHighLevel()==1?true:false,singalConfig.getMainBoard()==1?true:false, singalConfig1.getHighLevel()==1?true:false,singalConfig1.getMainBoard()==1?true:false,singalConfig.getIndex(),singalConfig1.getIndex())); mySignalsAdapter.notifyDataSetChanged(); } } }); listView.setAdapter(mySignalsAdapter); } private Gson gson = new Gson(); private class MySignalsAdapter extends BaseAdapter{ private Context context; public MySignalsAdapter(Context context) { this.context = context; } @Override public int getCount() { return signalConfiglist.size(); } @Override public SignalConfigBean getItem(int position) { return signalConfiglist.get(position); } @Override public long getItemId(int position) { return position; } @Override public View getView(final int position, View convertView, ViewGroup parent) { final ViewHolder viewHolder; if (convertView == null){ convertView = LayoutInflater.from(context).inflate(R.layout.layout_signal_conf_item,null); viewHolder = new ViewHolder(convertView); viewHolder.checkBox3.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { SignalConfigBean signalConfigBean = (SignalConfigBean) viewHolder.checkBox3.getTag(); signalConfigBean.setThree(isChecked); signalConfigViewModel.updateHightlevel(isChecked?1:0,position*2+1); } }); viewHolder.checkBox4.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { SignalConfigBean signalConfigBean = (SignalConfigBean) viewHolder.checkBox4.getTag(); signalConfigBean.setFour(isChecked); } });viewHolder.checkBox2.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { SignalConfigBean signalConfigBean = (SignalConfigBean) viewHolder.checkBox2.getTag(); signalConfigBean.setTwo(isChecked); } });viewHolder.checkBox1.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { SignalConfigBean signalConfigBean = (SignalConfigBean) viewHolder.checkBox1.getTag(); signalConfigBean.setOne(isChecked); signalConfigViewModel.updateHightlevel(isChecked?1:0,position*2); } }); convertView.setTag(viewHolder); viewHolder.checkBox1.setTag(signalConfiglist.get(position)); viewHolder.checkBox2.setTag(signalConfiglist.get(position)); viewHolder.checkBox3.setTag(signalConfiglist.get(position)); viewHolder.checkBox4.setTag(signalConfiglist.get(position)); }else { viewHolder = (ViewHolder) convertView.getTag(); viewHolder.checkBox1.setTag(signalConfiglist.get(position)); viewHolder.checkBox2.setTag(signalConfiglist.get(position)); viewHolder.checkBox3.setTag(signalConfiglist.get(position)); viewHolder.checkBox4.setTag(signalConfiglist.get(position)); } viewHolder.editText1.setTag(position*2); viewHolder.editText2.setTag((position*2+1)); final SignalConfigBean signalConfigItem = getItem(position); viewHolder.textView1.setText(signalConfigItem.getSignal_name_first()); viewHolder.textView2.setText(signalConfigItem.getSignal_name_second()); viewHolder.editText1.setText(String.valueOf(signalConfigItem.getPort_one())); viewHolder.editText2.setText(String.valueOf(signalConfigItem.getPort_two())); viewHolder.checkBox1.setChecked(signalConfigItem.isOne()); viewHolder.checkBox2.setChecked(signalConfigItem.isTwo()); viewHolder.checkBox3.setChecked(signalConfigItem.isThree()); viewHolder.checkBox4.setChecked(signalConfigItem.isFour()); return convertView; } class ViewHolder{ CheckBox checkBox1; CheckBox checkBox2; CheckBox checkBox3; CheckBox checkBox4; EditText editText1; EditText editText2; TextView textView1; TextView textView2; public ViewHolder(final View convertView) { checkBox1 = convertView.findViewById(R.id.signal_check_1); checkBox2 = convertView.findViewById(R.id.signal_check_2); checkBox3 = convertView.findViewById(R.id.signal_check_3); checkBox4 = convertView.findViewById(R.id.signal_check_4); editText1 = convertView.findViewById(R.id.et_signal1_port); editText2 = convertView.findViewById(R.id.et_signal2_port); editText1.setInputType(EditorInfo.TYPE_CLASS_NUMBER); editText2.setInputType(EditorInfo.TYPE_CLASS_NUMBER); editText1.setImeOptions(EditorInfo.IME_ACTION_DONE); editText2.setImeOptions(EditorInfo.IME_ACTION_DONE); editText1.setSingleLine(); editText2.setSingleLine(); editText1.addTextChangedListener(new TextWatcher() { @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { } @Override public void onTextChanged(CharSequence s, int start, int before, int count) { } @Override public void afterTextChanged(Editable s) { int pos = (int) editText1.getTag(); String str = s.toString(); if (!TextUtils.isEmpty(str)&& Utils.isDigital(str)){ int a = Integer.parseInt(str); if (a== list.get(pos).getGpio_num()){ }else{ handler.removeMessages(INDEX); Message message = Message.obtain(); message.what = INDEX; message.arg1 = pos; message.arg2 = a; handler.sendMessageDelayed(message,1500); } } } }); editText2.addTextChangedListener(new TextWatcher() { @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { } @Override public void onTextChanged(CharSequence s, int start, int before, int count) { } @Override public void afterTextChanged(Editable s) { int pos = (int) editText2.getTag(); String str = s.toString(); if (!TextUtils.isEmpty(str)&& Utils.isDigital(str)){ int a = Integer.parseInt(str); if (a== list.get(pos).getGpio_num()){ }else{ handler.removeMessages(INDEX); Message message = Message.obtain(); message.what = INDEX; message.arg1 = pos; message.arg2 = a; handler.sendMessageDelayed(message,1500); } } } }); textView1 = convertView.findViewById(R.id.tv_signal_1); textView2 = convertView.findViewById(R.id.tv_signal_2); } } } @Override public void onResume() { super.onResume(); Log.i(TAG, "onResume: "); } @Override public void onStop() { super.onStop(); Log.i(TAG, "onStop: "); } @Override public void onPause() { super.onPause(); Log.i(TAG, "onPause: "); } }