From cab2ea881e5711d16cf0003e8b00489a2c766365 Mon Sep 17 00:00:00 2001 From: endian11 <Dana_Lee1016@126.com> Date: 星期三, 16 九月 2020 19:28:22 +0800 Subject: [PATCH] dialog有多个项 可以选择 --- app/src/main/java/safeluck/drive/evaluation/bean/RemoteRouteCollect.java | 24 +++ app/src/main/res/layout/route_select_item.xml | 39 ++++ app/src/main/res/layout/layout_select_dlg_multi.xml | 33 ++++ app/src/main/java/safeluck/drive/evaluation/adapter/RouteSelectAdapter.java | 86 ++++++++++ app/src/main/java/safeluck/drive/evaluation/fragment/SysExamSettingFragment.java | 2 app/src/main/java/safeluck/drive/evaluation/fragment/TrainFragment.java | 83 ++++++++- app/src/main/java/safeluck/drive/evaluation/customview/SelectMutliDialog.java | 203 +++++++++++++++++++++++++ app/src/main/res/drawable/route_item_select_bg.xml | 4 8 files changed, 461 insertions(+), 13 deletions(-) diff --git a/app/src/main/java/safeluck/drive/evaluation/adapter/RouteSelectAdapter.java b/app/src/main/java/safeluck/drive/evaluation/adapter/RouteSelectAdapter.java new file mode 100644 index 0000000..bf4ec9c --- /dev/null +++ b/app/src/main/java/safeluck/drive/evaluation/adapter/RouteSelectAdapter.java @@ -0,0 +1,86 @@ +package safeluck.drive.evaluation.adapter; + +import android.content.Context; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.ImageView; +import android.widget.TextView; + +import androidx.recyclerview.widget.RecyclerView; + +import java.util.ArrayList; +import java.util.List; + +import safeluck.drive.evaluation.DB.route.RouteBean; +import safeluck.drive.evaluation.R; +import safeluck.drive.evaluation.bean.SysExamSettingLargeMenu; +import safeluck.drive.evaluation.listener.OnItemClickListener; + +/** + * + */ +public class RouteSelectAdapter extends RecyclerView.Adapter<RouteSelectAdapter.MyViewHolder> { + private List<RouteBean> mItems = new ArrayList<>(); + private LayoutInflater mInflater; + + private OnItemClickListener mClickListener; + private Context mContext; + public RouteSelectAdapter(Context context) { + this.mInflater = LayoutInflater.from(context); + this.mContext = context; + } + + public void setDatas(List<RouteBean> items) { + mItems.clear(); + mItems.addAll(items); + notifyDataSetChanged(); + } + + @Override + public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { + View view = mInflater.inflate(R.layout.route_select_item, parent, false); + final MyViewHolder holder = new MyViewHolder(view); + holder.itemView.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + int position = holder.getAdapterPosition(); + if (mClickListener != null) { + mClickListener.onItemClick(position, v); + } + } + }); + return holder; + } + + @Override + public void onBindViewHolder(MyViewHolder holder, int position) { + RouteBean item = mItems.get(position); + holder.tvTitle.setText(item.getRouteName()); + holder.iv_delete.setOnClickListener((v)->{ + mItems.remove(item); + notifyDataSetChanged(); + }); + + } + + @Override + public int getItemCount() { + return mItems.size(); + } + + class MyViewHolder extends RecyclerView.ViewHolder { + private TextView tvTitle; + private ImageView iv_delete; + + public MyViewHolder(View itemView) { + super(itemView); + tvTitle = (TextView) itemView.findViewById(R.id.tv_title); + iv_delete = (ImageView) itemView.findViewById(R.id.iv_delete); + } + } + + public void setOnItemClickListener(OnItemClickListener itemClickListener) { + this.mClickListener = itemClickListener; + } +} diff --git a/app/src/main/java/safeluck/drive/evaluation/bean/RemoteRouteCollect.java b/app/src/main/java/safeluck/drive/evaluation/bean/RemoteRouteCollect.java new file mode 100644 index 0000000..0542b50 --- /dev/null +++ b/app/src/main/java/safeluck/drive/evaluation/bean/RemoteRouteCollect.java @@ -0,0 +1,24 @@ +package safeluck.drive.evaluation.bean; + +import java.util.List; + +/** + * DriveJudge + * Created by lzw on 2020/9/16. 18:14:09 + * 閭锛�632393724@qq.com + * All Rights Saved! Chongqing AnYun Tech co. LTD + */ +public class RemoteRouteCollect { + + private List<RouteCollect> scheme; + + public List<RouteCollect> getScheme() { + return scheme; + } + + public void setScheme(List<RouteCollect> scheme) { + this.scheme = scheme; + } + + +} diff --git a/app/src/main/java/safeluck/drive/evaluation/customview/SelectMutliDialog.java b/app/src/main/java/safeluck/drive/evaluation/customview/SelectMutliDialog.java new file mode 100644 index 0000000..d78d502 --- /dev/null +++ b/app/src/main/java/safeluck/drive/evaluation/customview/SelectMutliDialog.java @@ -0,0 +1,203 @@ +package safeluck.drive.evaluation.customview; + +import android.app.Dialog; +import android.graphics.Color; +import android.graphics.drawable.ColorDrawable; +import android.os.Build; +import android.os.Bundle; +import android.util.DisplayMetrics; +import android.util.Log; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.view.Window; +import android.view.WindowManager; +import android.widget.Button; +import android.widget.RadioButton; +import android.widget.RadioGroup; +import android.widget.Toast; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.fragment.app.DialogFragment; +import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.recyclerview.widget.RecyclerView; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +import safeluck.drive.evaluation.DB.route.RouteBean; +import safeluck.drive.evaluation.R; +import safeluck.drive.evaluation.adapter.RouteSelectAdapter; +import safeluck.drive.evaluation.adapter.SysSettingPagerAdapter; +import safeluck.drive.evaluation.bean.SysExamSettingLargeMenu; +import safeluck.drive.evaluation.fragment.BaseSettingFragment; +import safeluck.drive.evaluation.fragment.shop.ShopFragment; +import safeluck.drive.evaluation.listener.OnItemClickListener; + +/** + * @ProjectName: DriveJudge + * @Package: safeluck.drive.evaluation.customview + * @ClassName: SelectDialog + * @Description: java绫讳綔鐢ㄦ弿杩� + * @Author: 鏉庡崰浼� + * @CreateDate: 2020-04-23 15:03 + * @UpdateUser: 鏇存柊鑰� + * @UpdateDate: 2020-04-23 15:03 + * @UpdateRemark: 鏇存柊璇存槑 + * @Version: 1.0 + */ + +public class SelectMutliDialog extends DialogFragment implements View.OnClickListener { + + private static final String TAG = "SelectDialog"; + private Button button; + private RadioGroup rgb; + + public static final int SELECT_NONE = -1; + private int result = SELECT_NONE; + + private ArrayList<String> stringArrayList; + private RecyclerView mRecy; + private RouteSelectAdapter mAdapter; + + + @Nullable + @Override + public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { + + if (getDialog() != null) { + Window window = getDialog().getWindow(); + + if (window != null) { + window.setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT)); + window.addFlags(WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE); + + getDialog().setOnShowListener(dialog -> { + window.clearFlags(WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE); + hideBottomUIMenu(); + }); + } + } + View view = inflater.inflate(R.layout.layout_select_dlg_multi,container,false); + Bundle bundle = getArguments(); + if (bundle != null){ + stringArrayList = bundle.getStringArrayList("content"); + } + initView(view); + return view; + } + + private void initView(View view) { + mRecy = (RecyclerView) view.findViewById(R.id.recy); + + mAdapter = new RouteSelectAdapter(getActivity()); + LinearLayoutManager manager = new LinearLayoutManager(getActivity()); + mRecy.setLayoutManager(manager); + mRecy.setAdapter(mAdapter); + + mAdapter.setOnItemClickListener(new OnItemClickListener() { + @Override + public void onItemClick(int position, View view) { + Toast.makeText(getActivity(), position+"", Toast.LENGTH_SHORT).show(); + if (onSelectedListener != null){ + onSelectedListener.makeYourChoice(result); + } + dismiss(); + } + }); + + mRecy.post(new Runnable() { + @Override + public void run() { + // Init Datas + ArrayList<String> menues = new ArrayList<>(Arrays.asList(getResources().getStringArray(R.array.array_large_item_menu))); + List<RouteBean> items = new ArrayList<>(); + for (int i = 0; i < menues.size(); i++) { + RouteBean item = new RouteBean(); + item.setRouteName(menues.get(i)); + item.setId(i); + items.add(item); + } + mAdapter.setDatas(items); + } + }); +// button = view.findViewById(R.id.btn_sure_); + +// button.setOnClickListener(this); + } + + @Override + public void onClick(View v) { + switch (v.getId()){ + case R.id.btn_sure_: + if (onSelectedListener != null){ + onSelectedListener.makeYourChoice(result); + } + dismiss(); + break; + } + } + + public interface OnSelectedListener{ + void makeYourChoice(int res); + } + + private OnSelectedListener onSelectedListener; + + public void setSelectedListener(OnSelectedListener onSelectedListener){ + this.onSelectedListener = onSelectedListener; + } + + @Override + public void onStart() { + super.onStart(); + Dialog dialog = getDialog(); + if (dialog != null){ + DisplayMetrics dm = new DisplayMetrics(); + getActivity().getWindowManager().getDefaultDisplay().getMetrics(dm); + int width = (int)(dm.widthPixels*0.5); + dialog.getWindow().setLayout(width,ViewGroup.LayoutParams.WRAP_CONTENT); + } + } + + + + public static SelectMutliDialog newInstance(String... args){ + + SelectMutliDialog sle = new SelectMutliDialog(); + if (args != null && args.length>=2){ + List<String> strs = Arrays.asList(args); + ArrayList<String> list = new ArrayList<>(strs); + Bundle bundle = new Bundle(); + bundle.putStringArrayList("content",list); + sle.setArguments(bundle); + } + + + return sle; + } + /** + * 闅愯棌铏氭嫙鎸夐敭锛屽苟涓斿叏灞� + */ + protected void hideBottomUIMenu() { + //闅愯棌铏氭嫙鎸夐敭锛屽苟涓斿叏灞� + if (Build.VERSION.SDK_INT > 11 && Build.VERSION.SDK_INT < 19) { // lower api + View v = this.getDialog().getWindow().getDecorView(); + v.setSystemUiVisibility(View.GONE); + } else if (Build.VERSION.SDK_INT >= 19) { + //for new api versions. + View decorView = getDialog().getWindow().getDecorView(); + int uiOptions = View.SYSTEM_UI_FLAG_HIDE_NAVIGATION + | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY | View.SYSTEM_UI_FLAG_FULLSCREEN; + decorView.setSystemUiVisibility(uiOptions); + } + } + + @Override + public void dismiss() { + + super.dismiss(); + } +} diff --git a/app/src/main/java/safeluck/drive/evaluation/fragment/SysExamSettingFragment.java b/app/src/main/java/safeluck/drive/evaluation/fragment/SysExamSettingFragment.java index 9a046c7..47f7d04 100644 --- a/app/src/main/java/safeluck/drive/evaluation/fragment/SysExamSettingFragment.java +++ b/app/src/main/java/safeluck/drive/evaluation/fragment/SysExamSettingFragment.java @@ -63,6 +63,8 @@ } }); + + mRecy.post(new Runnable() { @Override public void run() { diff --git a/app/src/main/java/safeluck/drive/evaluation/fragment/TrainFragment.java b/app/src/main/java/safeluck/drive/evaluation/fragment/TrainFragment.java index 4e9853f..700c286 100644 --- a/app/src/main/java/safeluck/drive/evaluation/fragment/TrainFragment.java +++ b/app/src/main/java/safeluck/drive/evaluation/fragment/TrainFragment.java @@ -39,6 +39,7 @@ import com.anyun.basecommonlib.MyLog; import com.google.gson.Gson; + import org.json.JSONException; import org.json.JSONObject; @@ -57,13 +58,18 @@ import safeluck.drive.evaluation.DB.exam_status.ExamStatusViewModel; import safeluck.drive.evaluation.DB.failitems.FailedProjViewModel; import safeluck.drive.evaluation.DB.failitems.FailedProj_select; +import safeluck.drive.evaluation.DB.route.RouteBean; +import safeluck.drive.evaluation.DB.route.RouteCross; import safeluck.drive.evaluation.DB.route.RouteLineViewModel; +import safeluck.drive.evaluation.DB.route.RouteTriggerLine; import safeluck.drive.evaluation.MainActivity; import safeluck.drive.evaluation.R; import safeluck.drive.evaluation.adapter.ScoreAdapter; import safeluck.drive.evaluation.bean.BaseDataUIBean; import safeluck.drive.evaluation.bean.ExamPlatformData; import safeluck.drive.evaluation.bean.MapInfoHead; +import safeluck.drive.evaluation.bean.RemoteRouteCollect; +import safeluck.drive.evaluation.bean.RouteCollect; import safeluck.drive.evaluation.bean.ScoreBean; import safeluck.drive.evaluation.cEventCenter.CEventCenter; import safeluck.drive.evaluation.cEventCenter.ICEventListener; @@ -72,6 +78,7 @@ import safeluck.drive.evaluation.customview.QRCodeDialog; import safeluck.drive.evaluation.customview.SelectDialog; import safeluck.drive.evaluation.customview.SelectDialogThree; +import safeluck.drive.evaluation.customview.SelectMutliDialog; import safeluck.drive.evaluation.im.MessageProcessor; import safeluck.drive.evaluation.platformMessage.JKMessage0201; import safeluck.drive.evaluation.platformMessage.JKMessage0202; @@ -106,6 +113,7 @@ private Button av_zhijiao, av_curve, av_park, av_podao; private Button houseView; private RouteLineViewModel routeLineViewModel; + private List<RouteBean> mRouteBeans = new ArrayList<>(); private List<ExamStatus> examStatusList = new ArrayList<>(); private List<String> item_conents = new ArrayList<>();//鍧¢亾瀹氱偣鍋滆溅鍜岃捣姝� @@ -372,6 +380,15 @@ failedProjViewModel = ViewModelProviders.of(this).get(FailedProjViewModel.class); routeLineViewModel = ViewModelProviders.of(this).get(RouteLineViewModel.class); + routeLineViewModel.getRouteBeans().observe(this, new Observer<List<RouteBean>>() { + @Override + public void onChanged(List<RouteBean> routeBeans) { + if (routeBeans.size()>0){ + mRouteBeans.clear(); + mRouteBeans.addAll(routeBeans); + } + } + }); failedProjViewModel.getFailedProjectsForIII(Constant.TEST_STU_ID).observe(this, new Observer<List<FailedProj_select>>() { @Override @@ -628,8 +645,60 @@ selectDialog.show(getFragmentManager(),"selectdialog"); }else{ if (exam_type == ROUTE_COLLECT){ + List<RouteCollect.CrossingActiveBean> crossingActiveBeans = new ArrayList<>(); + List<RouteCollect.TriggerLineBean> triggerLineBeans = new ArrayList<>(); + List<Double> xy = new ArrayList<>(); + RemoteRouteCollect remoteRouteCollect = new RemoteRouteCollect(); + RouteCollect routeCollect = new RouteCollect(); + List<RouteCollect> routeCollects = new ArrayList<>(); Toast.makeText(_mActivity, "缁撴潫閲囬泦", Toast.LENGTH_SHORT).show(); + CThreadPoolExecutor.runInBackground(new Runnable() { + @Override + public void run() { + for (RouteBean routeBean:mRouteBeans){ + int id = routeBean.getId(); + routeCollect.setName(routeBean.getRouteName()); + List<RouteTriggerLine> routeTriggerLines = WorkRoomDataBase.getWorkRoomDataBase(getContext().getApplicationContext()).getRouteTriggerLineDao().getAllRouteTriggerLine(id); + List<RouteCross> routeCrosses = WorkRoomDataBase.getWorkRoomDataBase(getContext().getApplicationContext()).getRouteCrooDao().getAllRouteCross(id); + for (RouteTriggerLine line:routeTriggerLines){ + RouteCollect.TriggerLineBean triggerLineBean = new RouteCollect.TriggerLineBean(); + int road = line.getRoad(); + int type = line.getType(); + + double x = line.getX(); + double y = line.getY(); + xy.clear(); + xy.add(x); + xy.add(y); + triggerLineBean.setRoad(road); + triggerLineBean.setType(type); + triggerLineBean.setX_y(xy); + triggerLineBeans.add(triggerLineBean); + + + } + routeCollect.setTrigger_line(triggerLineBeans); + + for (RouteCross routeCross:routeCrosses){ + int idx = routeCross.getIdx(); + int road = routeCross.getRoad(); + int active = routeCross.getActive(); + RouteCollect.CrossingActiveBean crossingActiveBean = new RouteCollect.CrossingActiveBean(); + crossingActiveBean.setActive(active); + crossingActiveBean.setIdx(idx); + crossingActiveBean.setRoad(road); + crossingActiveBeans.add(crossingActiveBean); + } + routeCollect.setCrossing_active(crossingActiveBeans); + routeCollects.add(routeCollect); + + } + remoteRouteCollect.setScheme(routeCollects); + String str = new Gson().toJson(remoteRouteCollect); + Log.i(TAG,"json====="+str); + } + }); ExamPlatformData.getInstance().setTrainingMode(ExamPlatformData.MODE_NONE); exam_type = 0; examStatusViewModel.updateStartExam(exam_type); @@ -654,21 +723,9 @@ // startArcGisMapFragment(url); // StatusDialog.with(_mActivity).setCancelable(true).setPrompt("鍔犺浇涓紝璇风◢鍚�...").setType(StatusDialog.Type.PROGRESS).show(); - MyInputDialog myDialog = MyInputDialog.Companion.newInstance("鎮ㄥ皢閫�鍑虹郴缁�,璇风‘璁ゆ暟鎹凡淇濆瓨"); + SelectMutliDialog myDialog = SelectMutliDialog.newInstance("鎮ㄥ皢閫�鍑虹郴缁�,璇风‘璁ゆ暟鎹凡淇濆瓨"); - myDialog.setOnClick(new MyInputDialog.MyOnClickListener() { - @Override - public void onSure(String string) { - Log.i(TAG,"鏀跺埌鐨勶細"+string); - - } - - @Override - public void onCancle() { - - } - }); myDialog.show(getFragmentManager(),"mydialog"); break; diff --git a/app/src/main/res/drawable/route_item_select_bg.xml b/app/src/main/res/drawable/route_item_select_bg.xml new file mode 100644 index 0000000..2874ca9 --- /dev/null +++ b/app/src/main/res/drawable/route_item_select_bg.xml @@ -0,0 +1,4 @@ +<?xml version="1.0" encoding="utf-8"?> +<selector xmlns:android="http://schemas.android.com/apk/res/android" > + <item android:state_pressed="true" android:drawable="@drawable/bg_item_select"></item> +</selector> diff --git a/app/src/main/res/layout/layout_select_dlg_multi.xml b/app/src/main/res/layout/layout_select_dlg_multi.xml new file mode 100644 index 0000000..64862c7 --- /dev/null +++ b/app/src/main/res/layout/layout_select_dlg_multi.xml @@ -0,0 +1,33 @@ +<?xml version="1.0" encoding="utf-8"?> +<LinearLayout + xmlns:android="http://schemas.android.com/apk/res/android" + android:layout_width="260dp" + + android:layout_height="360dp" + android:gravity="center" + + android:background="@drawable/bg_select_dlg" + android:orientation="vertical" > +<TextView + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:textSize="@dimen/network_train_textsize20px" + android:textColor="@android:color/white" + android:padding="@dimen/ui_margin_10dp" + android:background="@drawable/bg_select_dlg" + android:text="璇烽�夋嫨涓�涓」鐩細"/> + <LinearLayout + + android:layout_width="match_parent" + android:id="@+id/radiogroub" + android:layout_marginRight="@dimen/ui_margin_10dp" + android:layout_height="300dp"> + <androidx.recyclerview.widget.RecyclerView + android:id="@+id/recy" + android:layout_width="match_parent" + android:layout_height="match_parent"/> + + + </LinearLayout> + +</LinearLayout> \ No newline at end of file diff --git a/app/src/main/res/layout/route_select_item.xml b/app/src/main/res/layout/route_select_item.xml new file mode 100644 index 0000000..d7f8ae2 --- /dev/null +++ b/app/src/main/res/layout/route_select_item.xml @@ -0,0 +1,39 @@ +<?xml version="1.0" encoding="utf-8"?> +<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" + android:layout_width="match_parent" + android:layout_height="66dp" + android:gravity="center_vertical" + android:orientation="horizontal" + android:paddingLeft="16dp" + android:background="@drawable/route_item_select_bg" + android:paddingRight="16dp"> +<CheckBox + android:layout_width="0dp" + android:layout_weight="1" + android:layout_height="wrap_content" + android:layout_toLeftOf="@+id/tv_title" +/> + <TextView + android:id="@+id/tv_title" + android:layout_width="0dp" + android:layout_weight="2" + android:layout_height="wrap_content" + android:textColor="@android:color/white" + android:text="sdf" + android:padding="@dimen/ui_margin_5dp" + android:textSize="17sp"/> + +<!-- <View + android:layout_width="match_parent" + android:layout_height="0.2dp" + android:layout_alignParentBottom="true" + android:background="#c9c9c9"/>--> + <ImageView + android:layout_width="0dp" + android:layout_weight="1" + android:layout_height="wrap_content" + android:layout_toRightOf="@+id/tv_title" + android:background="@color/color_0ab0ef" + android:id="@+id/iv_delete" + android:src="@drawable/ic_arrow_back_white_24dp"/> +</LinearLayout> \ No newline at end of file -- Gitblit v1.8.0