如何在浮动按钮中仅设置一次单击

问题描述

我正在创建一个应用,而我的应用则基于费用管理器。

我创建了一个用于插入数据的浮动操作按钮,并添加了两个选项

  1. 收入收入
  2. 入门费用

但是当我按下那个浮动按钮时,我无法插入数据...但是当我两次按下时,我可以向其中添加数据。

但是我不想单击两次并添加数据...仅单击一次即可打开插入数据片段

这是我的“代码段片段”中的代码

import android.app.AlertDialog;
import android.os.Bundle;

import androidx.annotation.NonNull;
import androidx.fragment.app.Fragment;
import androidx.recyclerview.widget.linearlayoutmanager;
import androidx.recyclerview.widget.RecyclerView;

import android.text.TextUtils;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;

import com.firebase.ui.database.FirebaseRecyclerAdapter;
import com.firebase.ui.database.FirebaseRecyclerOptions;
import com.google.android.material.floatingactionbutton.FloatingActionButton;
import com.google.firebase.auth.FirebaseAuth;
import com.google.firebase.auth.FirebaseUser;
import com.google.firebase.database.DataSnapshot;
import com.google.firebase.database.DatabaseError;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;
import com.google.firebase.database.ValueEventListener;

import org.w3c.dom.Text;

import java.text.DateFormat;
import java.util.Date;

import natureorigin.in.Model.Data;

/**
 * A simple {@link Fragment} subclass.
 * Use the {@link DasshboardFragment#newInstance} factory method to
 * create an instance of this fragment.
 */
public class DasshboardFragment extends Fragment {
    // floating btn
    private FloatingActionButton fab_main_btn;
    private FloatingActionButton fab_income_btn;
    private  FloatingActionButton fab_expense_btn;

    //Floating btn txtview
    private TextView fab_income_txt;
    private TextView fab_expense_txt;

    //boolean
    private  boolean isOpen = false;

    // Animation

    private Animation FadeOpen,Fadeclose;

    //firebase connection...
    private FirebaseAuth mAuth;
    private DatabaseReference mIncomeDatabase;
    private DatabaseReference mExpenseDatabase;

    //dash income and expense....
    private TextView totalincomeresult;
    private TextView totalexpenseresult;

    //REcycler view..

    private RecyclerView mrecyclerincomeView;
    private RecyclerView mrecyclerexpenseView;

    // Todo: Rename parameter arguments,choose names that match
    // the fragment initialization parameters,e.g. ARG_ITEM_NUMBER
    private static final String ARG_ParaM1 = "param1";
    private static final String ARG_ParaM2 = "param2";

    // Todo: Rename and change types of parameters
    private String mParam1;
    private String mParam2;

    public DasshboardFragment() {
        // required empty public constructor
    }

    /**
     * Use this factory method to create a new instance of
     * this fragment using the provided parameters.
     *
     * @param param1 Parameter 1.
     * @param param2 Parameter 2.
     * @return A new instance of fragment DasshboardFragment.
     */
    // Todo: Rename and change types and number of parameters
    public static DashboardFragment newInstance(String param1,String param2) {
        DashboardFragment fragment = new DashboardFragment();
        Bundle args = new Bundle();
        args.putString(ARG_ParaM1,param1);
        args.putString(ARG_ParaM2,param2);
        fragment.setArguments(args);
        return fragment;
    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        if (getArguments() != null) {
            mParam1 = getArguments().getString(ARG_ParaM1);
            mParam2 = getArguments().getString(ARG_ParaM2);

        }


    }

    @Override
    public View onCreateView(LayoutInflater inflater,ViewGroup container,Bundle savedInstanceState) {
        // Inflate the layout for this fragment
        View myview= inflater.inflate(R.layout.fragment_dasshboard,container,false);


        //Connect Floting Btn to Layout

        fab_main_btn=myview.findViewById(R.id.fb_main_plus_btn);
        fab_income_btn=myview.findViewById(R.id.income_ft_btn);
        fab_expense_btn=myview.findViewById(R.id.expense_ft_btn);

        // Connect Floting txt.

        fab_income_txt=myview.findViewById(R.id.income_ft_txt);
        fab_expense_txt=myview.findViewById(R.id.expense_ft_txt);

        //total income and expense..

        totalincomeresult=myview.findViewById(R.id.income_set_result);
        totalexpenseresult=myview.findViewById(R.id.expense_set_result);


        //REcycler view...
        mrecyclerincomeView=myview.findViewById(R.id.recycler_id_income_dash);
        mrecyclerexpenseView=myview.findViewById(R.id.recycler_id_expense_dash);

        //Animation connect....

        FadeOpen= AnimationUtils.loadAnimation(getActivity(),R.anim.fade_open);
        Fadeclose= AnimationUtils.loadAnimation(getActivity(),R.anim.fade_close);

        //firebase connection....

        mAuth=FirebaseAuth.getInstance();
        FirebaseUser mUser=mAuth.getCurrentUser();
        String uid=mUser.getUid();

        mIncomeDatabase= FirebaseDatabase.getInstance().getReference().child("IncomeData").child(uid);
        mExpenseDatabase= FirebaseDatabase.getInstance().getReference().child("ExpenseData").child(uid);







        fab_main_btn.setonClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if(isOpen){
                    addData();

                    fab_income_btn.startAnimation(Fadeclose);
                    fab_expense_btn.startAnimation(Fadeclose);
                    fab_income_btn.setClickable(false);
                    fab_expense_btn.setClickable(false);

                    fab_income_txt.startAnimation(Fadeclose);
                    fab_expense_txt.startAnimation(Fadeclose);
                    fab_income_txt.setClickable(false);
                    fab_expense_txt.setClickable(false);
                    isOpen=false;

                }else{
                    fab_income_btn.startAnimation(FadeOpen);
                    fab_expense_btn.startAnimation(FadeOpen);
                    fab_income_btn.setClickable(true);
                    fab_expense_btn.setClickable(true);

                    fab_income_txt.startAnimation(FadeOpen);
                    fab_expense_txt.startAnimation(FadeOpen);
                    fab_income_txt.setClickable(true);
                    fab_expense_txt.setClickable(true);
                    isOpen=true;
                }


            }
        });


        //Calculate total income..

        mIncomeDatabase.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot snapshot) {

                int incometotasum=0;

                for (DataSnapshot mysnapshot:snapshot.getChildren()){


                    Data data = mysnapshot.getValue(Data.class);

                    incometotasum+=data.getAmount();
                    String sttotalsum=String.valueOf(incometotasum);

                    totalincomeresult.setText(sttotalsum+".00");

                }
            }

            @Override
            public void onCancelled(@NonNull DatabaseError error) {

            }
        });

        //Calculate total expense..



        mExpenseDatabase.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot snapshot) {
                int expensetotalsum=0;

                for (DataSnapshot mysnapshot:snapshot.getChildren()){


                    Data data = mysnapshot.getValue(Data.class);

                    expensetotalsum+=data.getAmount();
                    String stExpensetotalsum=String.valueOf(expensetotalsum);

                    totalexpenseresult.setText(stExpensetotalsum+".00");

                }
            }

            @Override
            public void onCancelled(@NonNull DatabaseError error) {


            }
        });

        //REcycler...

        linearlayoutmanager layoutManagerincome=new linearlayoutmanager(getActivity(),linearlayoutmanager.HORIZONTAL,false);
        layoutManagerincome.setStackFromEnd(true);
        layoutManagerincome.setReverseLayout(true);
        mrecyclerincomeView.setHasFixedSize(true);
        mrecyclerincomeView.setLayoutManager(layoutManagerincome);


        linearlayoutmanager layoutManagerexpense=new linearlayoutmanager(getActivity(),false);
        layoutManagerexpense.setStackFromEnd(true);
        layoutManagerexpense.setReverseLayout(true);
        mrecyclerexpenseView.setHasFixedSize(true);
        mrecyclerexpenseView.setLayoutManager(layoutManagerexpense);







        return myview;

    }


    //Floting btn anim....

    private void ftAnimation(){
        if(isOpen){

            fab_income_btn.startAnimation(Fadeclose);
            fab_expense_btn.startAnimation(Fadeclose);
            fab_income_btn.setClickable(false);
            fab_expense_btn.setClickable(false);

            fab_income_txt.startAnimation(Fadeclose);
            fab_expense_txt.startAnimation(Fadeclose);
            fab_income_txt.setClickable(false);
            fab_expense_txt.setClickable(false);
            isOpen=false;

        }else{
            fab_income_btn.startAnimation(FadeOpen);
            fab_expense_btn.startAnimation(FadeOpen);
            fab_income_btn.setClickable(true);
            fab_expense_btn.setClickable(true);

            fab_income_txt.startAnimation(FadeOpen);
            fab_expense_txt.startAnimation(FadeOpen);
            fab_income_txt.setClickable(true);
            fab_expense_txt.setClickable(true);
            isOpen=true;
        }
    }


    private void addData(){

        //Fab Button Income....

        fab_income_btn.setonClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                incomeDataInsert();

            }
        });

        fab_expense_btn.setonClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
               expensedatainsert();
            }
        });

    }

    public void incomeDataInsert(){
        AlertDialog.Builder mydialog=new AlertDialog.Builder(getActivity());
        LayoutInflater inflater= LayoutInflater.from(getActivity());
        View myview =inflater.inflate(R.layout.custom_layout_for_insert_data,null);
        mydialog.setView(myview);
        final AlertDialog dialog=mydialog.create();

        final EditText editAmount=myview.findViewById(R.id.amount_edt);
        final EditText editProductname=myview.findViewById(R.id.Product_name_edt);
        final EditText editQuantity=myview.findViewById(R.id.quantity_edt);



        Button btnSave = myview.findViewById(R.id.save_btn);
        Button btnCancel = myview.findViewById(R.id.cancel_btn);

        btnSave.setonClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {



                String amount=editAmount.getText().toString().trim();
                String productname=editProductname.getText().toString().trim();
                String quantity=editQuantity.getText().toString().trim();

                if(TextUtils.isEmpty(amount)){
                    editAmount.setError("required Field..");
                    return;


                }
                int ouramountint=Integer.parseInt(amount);


                if(TextUtils.isEmpty(productname)){
                    editProductname.setError("required Field..");
                    return;
                }



                if(TextUtils.isEmpty(quantity)){
                    editQuantity.setError("required Field..");
                    return;
                }

                String id=mIncomeDatabase.push().getKey();

                String mDate=DateFormat.getDateInstance().format(new Date());

                Data data = new Data(ouramountint,productname,quantity,id,mDate);

                mIncomeDatabase.child(id).setValue(data);
                Toast.makeText(getActivity(),"DATA ADDED",Toast.LENGTH_SHORT).show();

                ftAnimation();
                dialog.dismiss();




            }
        });


        btnCancel.setonClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                ftAnimation();
                dialog.dismiss();
            }
        });
        dialog.show();
    }

    public void expensedatainsert(){
        AlertDialog.Builder mydialog=new AlertDialog.Builder(getActivity());
        LayoutInflater inflater=LayoutInflater.from(getActivity());
        View myview=inflater.inflate(R.layout.custom_layout_for_insert_data,null);
        mydialog.setView(myview);
        final AlertDialog dialog = mydialog.create();
        final EditText amount = myview.findViewById(R.id.amount_edt);
        final EditText productname=myview.findViewById(R.id.Product_name_edt);
        final EditText quantity = myview.findViewById(R.id.quantity_edt);

        Button btnSave=myview.findViewById(R.id.save_btn);
        Button btnCancel = myview.findViewById(R.id.cancel_btn);

        btnSave.setonClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                String tmAmount = amount.getText().toString().trim();
                String tmProductname=productname.getText().toString().trim();
                String tmQuantity = quantity.getText().toString().trim();

                if (TextUtils.isEmpty(tmAmount)){
                    amount.setError("required Field..");
                    return;
                }

                int inamount=Integer.parseInt(tmAmount);


                if(TextUtils.isEmpty(tmProductname)){
                    productname.setError("required Field..");
                    return;
                }
                if (TextUtils.isEmpty(tmQuantity)){
                    quantity.setError("required Field..");
                    return;
                }


                String id=mExpenseDatabase.push().getKey();

                String mDate=DateFormat.getDateInstance().format(new Date());

                Data data = new Data(inamount,tmProductname,tmQuantity,mDate);

                mExpenseDatabase.child(id).setValue(data);
                Toast.makeText(getActivity(),Toast.LENGTH_SHORT).show();

                ftAnimation();
                dialog.dismiss();

            }
        });

       btnCancel.setonClickListener(new View.OnClickListener() {
           @Override
           public void onClick(View v) {
               ftAnimation();
               dialog.dismiss();
           }
       });

       dialog.show();

    }

    @Override
    public void onStart() {
        super.onStart();

        FirebaseRecyclerOptions<Data> options=
                new FirebaseRecyclerOptions.Builder<Data>()
                        .setQuery(mIncomeDatabase,Data.class)
                        .setLifecycleOwner(this)
                        .build();
        FirebaseRecyclerAdapter<Data,DasshboardFragment.Incomeviewholder> incomeAdapter = new FirebaseRecyclerAdapter<Data,DasshboardFragment.Incomeviewholder>(options) {
            @NonNull
            @Override
            public DasshboardFragment.Incomeviewholder onCreateViewHolder(@NonNull ViewGroup parent,int viewType) {
                return new DasshboardFragment.Incomeviewholder(LayoutInflater.from(parent.getContext()).inflate(R.layout.dashboard_income,parent,false));
            }
            @Override
            protected void onBindViewHolder(@NonNull DasshboardFragment.Incomeviewholder holder,final int position,@NonNull final Data model) {


                holder.setIncomeproductname(model.getProduct_name());
                holder.setIncomeamount(model.getAmount());
                holder.setIncomedate(model.getDate());

            }
        };
        mrecyclerincomeView.setAdapter(incomeAdapter);



        FirebaseRecyclerOptions<Data> toptions=
                new FirebaseRecyclerOptions.Builder<Data>()
                        .setQuery(mExpenseDatabase,DasshboardFragment.Expenseviewholder> expenseAdapter = new FirebaseRecyclerAdapter<Data,DasshboardFragment.Expenseviewholder>(toptions) {
            @NonNull
            @Override
            public DasshboardFragment.Expenseviewholder onCreateViewHolder(@NonNull ViewGroup parent,int viewType) {
                return new DasshboardFragment.Expenseviewholder(LayoutInflater.from(parent.getContext()).inflate(R.layout.dashboard_expense,false));
            }
            @Override
            protected void onBindViewHolder(@NonNull DasshboardFragment.Expenseviewholder viewholder,@NonNull final Data model) {


                viewholder.setexpenseproductname(model.getProduct_name());
                viewholder.setexpenseamount(model.getAmount());
                viewholder.setexpensedate(model.getDate());

            }
        };
        mrecyclerexpenseView.setAdapter(expenseAdapter);

    }

    //for income data


    public static class Incomeviewholder extends  RecyclerView.ViewHolder{
        View  mIncomeview;
        public Incomeviewholder(View itemView){
            super(itemView);
            mIncomeview=itemView;
        }
        public void setIncomeproductname (String productname){
            TextView mproductname=mIncomeview.findViewById(R.id.product_income_ds);
            mproductname.setText(productname);
        }

        public void setIncomeamount (int amount){
            TextView mamount=mIncomeview.findViewById(R.id.amount_income_ds);
            String stamount=String.valueOf(amount);
            mamount.setText(stamount);
        }

        public void setIncomedate (String date){
            TextView mdate=mIncomeview.findViewById(R.id.date_income_ds);
            mdate.setText(date);
        }




    }


    public static class Expenseviewholder extends  RecyclerView.ViewHolder{
        View  mExpenseview;
        public Expenseviewholder(View itemView){
            super(itemView);
            mExpenseview=itemView;
        }
        public void setexpenseproductname (String productname){
            TextView mproductname=mExpenseview.findViewById(R.id.product_expense_ds);
            mproductname.setText(productname);
        }

        public void setexpenseamount (int amount){
            TextView mamount=mExpenseview.findViewById(R.id.amount_expense_ds);
            String stramount=String.valueOf(amount);
            mamount.setText(stramount);
        }

        public void setexpensedate (String date){
            TextView mdate=mExpenseview.findViewById(R.id.date_expense_ds);
            mdate.setText(date);
        }




    }








}

这是我的dashboard_fragment xml中的代码



<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:orientation="vertical"
    android:layout_height="match_parent"
    tools:context=".DasshboardFragment">


    <androidx.cardview.widget.CardView
        android:layout_width="match_parent"
        app:cardElevation="5dp"
        android:elevation="10dp"
        android:layout_height="wrap_content">

    <LinearLayout
        android:layout_width="wrap_content"
        android:orientation="vertical"
        android:layout_height="wrap_content">

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:baselineAligned="false"
            android:orientation="horizontal">

            <RelativeLayout
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_gravity="center"
                android:layout_weight="1">

                <TextView
                    android:layout_width="match_parent"
                    android:layout_height="29dp"
                    android:gravity="center"
                    android:text="INCOME"
                    android:textAlignment="center"
                    android:textAppearance="?android:textAppearanceLarge"

                    android:textColor="@color/income_clr">

                </TextView>

            </RelativeLayout>

            <RelativeLayout
                android:layout_width="2dp"
                android:layout_height="wrap_content"
                android:layout_gravity="center"
                android:layout_weight="1">

                <TextView
                    android:layout_width="match_parent"
                    android:layout_height="29dp"
                    android:gravity="center"
                    android:text="EXPENSE"
                    android:textAlignment="center"
                    android:textAppearance="?android:textAppearanceLarge"
                    android:textColor="@color/eexpense_clr">

                </TextView>

            </RelativeLayout>


        </LinearLayout>

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:baselineAligned="false"
            android:layout_marginTop="7dp"
            android:orientation="horizontal">

            <RelativeLayout
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_gravity="center"
                android:layout_weight="1">

                <TextView
                    android:layout_width="match_parent"
                    android:layout_height="29dp"
                    android:gravity="center"
                    android:id="@+id/income_set_result"
                    android:text="000.000"
                    android:textAlignment="center"
                    android:textAppearance="?android:textAppearanceLarge"

                    android:textColor="@color/income_clr">

                </TextView>

            </RelativeLayout>

            <RelativeLayout
                android:layout_width="2dp"
                android:layout_height="wrap_content"
                android:layout_gravity="center"
                android:layout_weight="1">

                <TextView
                    android:layout_width="match_parent"
                    android:layout_height="29dp"
                    android:gravity="center"
                    android:id="@+id/expense_set_result"
                    android:text="000.000"
                    android:textAlignment="center"
                    android:textAppearance="?android:textAppearanceLarge"
                    android:textColor="@color/eexpense_clr">

                </TextView>

            </RelativeLayout>


        </LinearLayout>


    </LinearLayout>

</androidx.cardview.widget.CardView>


<androidx.coordinatorlayout.widget.CoordinatorLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <ScrollView
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

        <LinearLayout
            android:layout_width="match_parent"
            android:orientation="vertical"
            android:layout_marginTop="10dp"
            android:layout_height="wrap_content">

            <TextView
                android:layout_width="match_parent"
                android:text="INCOME"
                android:textAppearance="?android:textAppearanceLarge"
                android:padding="10dp"
                android:layout_height="wrap_content">

            </TextView>

            <androidx.recyclerview.widget.RecyclerView
                android:id="@+id/recycler_id_income_dash"
                android:layout_width="match_parent"
                android:layout_height="200dp">

            </androidx.recyclerview.widget.RecyclerView>

            <TextView
                android:layout_width="match_parent"
                android:text="EXPENSE"
                android:textAppearance="?android:textAppearanceLarge"
                android:padding="10dp"
                android:layout_height="wrap_content">

            </TextView>
            <androidx.recyclerview.widget.RecyclerView
                android:id="@+id/recycler_id_expense_dash"
                android:layout_width="match_parent"
                android:layout_height="200dp">

            </androidx.recyclerview.widget.RecyclerView>
        </LinearLayout>
    </ScrollView>



    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_gravity="bottom|end"
        android:layout_marginRight="15dp"
        android:layout_marginEnd="15dp"
        android:layout_marginBottom="200dp"
        android:layout_height="wrap_content">

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Expense"
            android:id="@+id/expense_ft_txt"
            android:padding="5dp"
            android:textColor="@color/colorAccent"
            android:background="@color/eexpense_clr"
            android:layout_gravity="center"
            android:layout_marginRight="5dp"
            android:layout_marginEnd="5dp"
            android:visibility="invisible"
            android:textAppearance="?android:textAppearanceSmall"/>

        <com.google.android.material.floatingactionbutton.FloatingActionButton
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/expense_ft_btn"
            android:layout_gravity="bottom|end"
            android:backgroundTint="@color/colorPrimary"
            android:elevation="6dp"
            app:fabSize="mini"
            android:visibility="invisible"
            app:pressedTranslationZ="12dp"
            android:src="@drawable/expense"
            />
    </LinearLayout>
    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_gravity="bottom|end"
        android:layout_marginRight="15dp"
        android:layout_marginEnd="15dp"
        android:layout_marginBottom="140dp"
        android:layout_height="wrap_content">

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Income"
            android:id="@+id/income_ft_txt"
            android:padding="5dp"
            android:textColor="@color/colorAccent"
            android:background="@color/income_clr"
            android:layout_gravity="center"
            android:layout_marginRight="5dp"
            android:layout_marginEnd="5dp"
            android:visibility="invisible"
            android:textAppearance="?android:textAppearanceSmall"/>

        <com.google.android.material.floatingactionbutton.FloatingActionButton
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:id="@+id/income_ft_btn"
            android:layout_gravity="bottom|end"
            android:backgroundTint="@color/colorPrimary"
            android:elevation="6dp"
            app:fabSize="mini"
            android:visibility="invisible"
            app:pressedTranslationZ="12dp"
            android:src="@drawable/income"
            />
    </LinearLayout>


    <com.google.android.material.floatingactionbutton.FloatingActionButton
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/fb_main_plus_btn"
        android:layout_gravity="bottom|end"
        android:layout_marginBottom="65dp"
        android:layout_marginRight="20dp"
        android:layout_marginEnd="20dp"
        android:backgroundTint="@color/dashboard_clr"
        app:fabSize="normal"
        android:src="@drawable/dashboard"/>





</androidx.coordinatorlayout.widget.CoordinatorLayout>

</LinearLayout>

请任何人帮助我

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)