Multiple DatePickers in same activity

佐手、 提交于 2019-11-26 20:48:47

You need to make 2 separate DatePicker Dialogs

Make 2 Listeners

int from_year, from_month, from_day,to_year, to_month, to_day; //initialize them to current date in onStart()/onCreate()
DatePickerDialog.OnDateSetListener from_dateListener,to_dateListener;

Implement them...

         from_dateListener = new OnDateSetListener(){

            public void onDateSet(DatePicker arg0, int arg1, int arg2, int arg3) {

                          ...

                }
            }

        };
        to_dateListener = new OnDateSetListener(){
            public void onDateSet(DatePicker arg0, int arg1, int arg2, int arg3) {
                .....
            }
        };

Create Seperate Dialogs for both of them

int DATE_PICKER_TO = 0;
int DATE_PICKER_FROM = 1;

@Override
protected Dialog onCreateDialog(int id) {

    switch(id){
        case DATE_PICKER_FROM:
                return new DatePickerDialog(this, from_dateListener, from_year, from_month, from_day); 
            case DATE_PICKER_TO:
                return new DatePickerDialog(this, to_dateListener, to_year, to_month, to_day);
    }
        return null;
}

I have a solution that allows for an unlimited number of date fields without adding new dialog types. When the user clicks one of the buttons, I register which TextView and Calendar is currently being modified before launching the DatePickerDialog. The dialog's OnDateSetListener then updates the registered TextView and Calendar.

import java.util.Calendar;

import android.app.Activity;
import android.app.DatePickerDialog;
import android.app.Dialog;
import android.app.DatePickerDialog.OnDateSetListener;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.DatePicker;
import android.widget.TextView;

public class MultiDatePickerActivity extends Activity {

    private TextView startDateDisplay;
    private TextView endDateDisplay;
    private Button startPickDate;
    private Button endPickDate;
    private Calendar startDate;
    private Calendar endDate;

    static final int DATE_DIALOG_ID = 0;

    private TextView activeDateDisplay;
    private Calendar activeDate;

    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.multidatepicker);

        /*  capture our View elements for the start date function   */
        startDateDisplay = (TextView) findViewById(R.id.startDateDisplay);
        startPickDate = (Button) findViewById(R.id.startPickDate);

        /* get the current date */
        startDate = Calendar.getInstance();

        /* add a click listener to the button   */
        startPickDate.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
                showDateDialog(startDateDisplay, startDate);
            }
        });

        /* capture our View elements for the end date function */
        endDateDisplay = (TextView) findViewById(R.id.endDateDisplay);
        endPickDate = (Button) findViewById(R.id.endPickDate);

        /* get the current date */
        endDate = Calendar.getInstance();

        /* add a click listener to the button   */
        endPickDate.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
                showDateDialog(endDateDisplay, endDate);
            }
        });

        /* display the current date (this method is below)  */
        updateDisplay(startDateDisplay, startDate);
        updateDisplay(endDateDisplay, endDate);
    }

    private void updateDisplay(TextView dateDisplay, Calendar date) {
        dateDisplay.setText(
                new StringBuilder()
                    // Month is 0 based so add 1
                    .append(date.get(Calendar.MONTH) + 1).append("-")
                    .append(date.get(Calendar.DAY_OF_MONTH)).append("-")
                    .append(date.get(Calendar.YEAR)).append(" "));

    }

    public void showDateDialog(TextView dateDisplay, Calendar date) {
        activeDateDisplay = dateDisplay;
        activeDate = date;
        showDialog(DATE_DIALOG_ID);
    }

    private OnDateSetListener dateSetListener = new OnDateSetListener() {
        @Override
        public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
            activeDate.set(Calendar.YEAR, year);
            activeDate.set(Calendar.MONTH, monthOfYear);
            activeDate.set(Calendar.DAY_OF_MONTH, dayOfMonth);
            updateDisplay(activeDateDisplay, activeDate);
            unregisterDateDisplay();
        }
    };

    private void unregisterDateDisplay() {
        activeDateDisplay = null;
        activeDate = null;
    }

    @Override
    protected Dialog onCreateDialog(int id) {
        switch (id) {
            case DATE_DIALOG_ID:
                return new DatePickerDialog(this, dateSetListener, activeDate.get(Calendar.YEAR), activeDate.get(Calendar.MONTH), activeDate.get(Calendar.DAY_OF_MONTH));
        }
        return null;
    }

    @Override
    protected void onPrepareDialog(int id, Dialog dialog) {
        super.onPrepareDialog(id, dialog);
        switch (id) {
            case DATE_DIALOG_ID:
                ((DatePickerDialog) dialog).updateDate(activeDate.get(Calendar.YEAR), activeDate.get(Calendar.MONTH), activeDate.get(Calendar.DAY_OF_MONTH));
                break;
        }
    }
}

This kind of flexibility is useful in an application where you don't know how many date pickers you will need until runtime.

Expanding Adam's option into an slightly lighter weight interpretation and potentially more useful, I decided to maintain an int reference for the element ID that instantiated the dialog request and then just referenced that in the final event handler. This has the added benefit of fitting nicely into a switch statement in this method in case you have multiple date inputs but want specific formatting for each or groups of each. All snippets below are in my Activity class directly

Instance variables

private static final int        DIALOG_DATE_PICKER  = 100;
private int                     datePickerInput;

Dialog Handler

@Override
public Dialog onCreateDialog(int id)
{
    switch(id) {
        case DIALOG_DATE_PICKER:
            final Calendar c = Calendar.getInstance();
            DatePickerDialog dialog = new DatePickerDialog(this, dateSetListener, c.get(Calendar.YEAR), c.get(Calendar.MONTH), c.get(Calendar.DAY_OF_MONTH));
            return dialog;
    }
    return null;
}

Click Listener

private OnClickListener datePickerListener =
    new OnClickListener()
{
    @Override
    public void onClick(View v)
    {
        datePickerInput = v.getId();
        showDialog(DIALOG_DATE_PICKER);
    }
};

Date Selection Handler

private DatePickerDialog.OnDateSetListener dateSetListener =
    new DatePickerDialog.OnDateSetListener()
{
    @Override
    public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth)
    {
        switch( datePickerInput ) {
            case R.id.datePicker1:
                ((EditText) findViewById( datePickerInput ))
                    .setText(...);
                ...
                break;
            case R.id.datePicker2:
                ...
                break;
            default:
                ...
                break;
        }
    }
};
Stanislasdrg

I think I've found a cleaner solution. It's a mix between what's advised by Google and the comments I read here. In my case, It's even working when called from a Viewpager's fragment. Basically, I pass a bundle of arguments to the dialog fragment when calling the picker dialog from my fragment, as defined here : Android: Pass data(extras) to a fragment Then I get back the bundle value in my DialogFragment class, and switch on its value.

Here are the two listeners of both my startDate and endDate buttons, from my Fragment code :

    mWylStartDate.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Bundle bundle = new Bundle();
            bundle.putInt("DATE",1);

            DialogFragment newFragment = new DatePickerFragment();
            newFragment.setArguments(bundle);

            newFragment.show(getFragmentManager(), "datePicker");
        }
    });

    mWylEndDate.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Bundle bundle = new Bundle();
            bundle.putInt("DATE",2);

            DialogFragment newFragment = new DatePickerFragment();
            newFragment.setArguments(bundle);

            newFragment.show(getFragmentManager(), "datePicker");

        }
    });

Here's my DatePickerFragment class

public class DatePickerFragment extends DialogFragment implements DatePickerDialog.OnDateSetListener {

static final int START_DATE = 1;
static final int END_DATE = 2;

private int mChosenDate;

int cur = 0;


@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {

    // Use the current date as the default date in the picker
    final Calendar c = Calendar.getInstance();
    int year = c.get(Calendar.YEAR);
    int month = c.get(Calendar.MONTH);
    int day = c.get(Calendar.DAY_OF_MONTH);


    Bundle bundle = this.getArguments();
    if(bundle != null){
        mChosenDate = bundle.getInt("DATE",1);
    }



    switch (mChosenDate) {

        case START_DATE:
            cur = START_DATE;
            return new DatePickerDialog(getActivity(), this, year, month, day);

        case END_DATE:
            cur = END_DATE;
            return new DatePickerDialog(getActivity(), this, year, month, day);

    }
    return null;
}


@Override
public void onDateSet(DatePicker datePicker, int year, int month, int day) {

    if(cur == START_DATE){
        // set selected date into textview
        Log.v("Date Début","Date1 : " + new StringBuilder().append(month + 1)
                .append("-").append(day).append("-").append(year)
                .append(" "));
    }
    else{
        Log.v("Date fin","Date2 : " + new StringBuilder().append(month + 1)
                .append("-").append(day).append("-").append(year)
                .append(" "));
    }
}

}

anupam sharma

you can use simply this type

public class MainActivity extends Activity {

     private TextView startDateDisplay;
        private TextView endDateDisplay;
        private Button startPickDate;
        private Button endPickDate;
        private Calendar startDate;
        private Calendar endDate;

        static final int DATE_DIALOG_ID = 0;

        private TextView activeDateDisplay;
        private Calendar activeDate;

        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);

            /*  capture our View elements for the start date function   */
            startDateDisplay = (TextView) findViewById(R.id.startDateDisplay);
            startPickDate = (Button) findViewById(R.id.startPickDate);

            /* get the current date */
            startDate = Calendar.getInstance();

            /* add a click listener to the button   */
            startPickDate.setOnClickListener(new View.OnClickListener() {
                public void onClick(View v) {
                    showDateDialog(startDateDisplay, startDate);
                }
            });

            /* capture our View elements for the end date function */
            endDateDisplay = (TextView) findViewById(R.id.endDateDisplay);
            endPickDate = (Button) findViewById(R.id.endPickDate);

            /* get the current date */
            endDate = Calendar.getInstance();

            /* add a click listener to the button   */
            endPickDate.setOnClickListener(new View.OnClickListener() {
                public void onClick(View v) {
                    showDateDialog(endDateDisplay, endDate);
                }
            });

            /* display the current date (this method is below)  */
            updateDisplay(startDateDisplay, startDate);
            updateDisplay(endDateDisplay, endDate);
        }

        private void updateDisplay(TextView dateDisplay, Calendar date) {
            dateDisplay.setText(
                    new StringBuilder()
                        // Month is 0 based so add 1
                        .append(date.get(Calendar.MONTH) + 1).append("-")
                        .append(date.get(Calendar.DAY_OF_MONTH)).append("-")
                        .append(date.get(Calendar.YEAR)).append(" "));

        }

        public void showDateDialog(TextView dateDisplay, Calendar date) {
            activeDateDisplay = dateDisplay;
            activeDate = date;
            showDialog(DATE_DIALOG_ID);
        }

        private OnDateSetListener dateSetListener = new OnDateSetListener() {
            @Override
            public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
                activeDate.set(Calendar.YEAR, year);
                activeDate.set(Calendar.MONTH, monthOfYear);
                activeDate.set(Calendar.DAY_OF_MONTH, dayOfMonth);
                updateDisplay(activeDateDisplay, activeDate);
                unregisterDateDisplay();
            }
        };

        private void unregisterDateDisplay() {
            activeDateDisplay = null;
            activeDate = null;
        }

        @Override
        protected Dialog onCreateDialog(int id) {
            switch (id) {
                case DATE_DIALOG_ID:
                    return new DatePickerDialog(this, dateSetListener, activeDate.get(Calendar.YEAR), activeDate.get(Calendar.MONTH), activeDate.get(Calendar.DAY_OF_MONTH));
            }
            return null;
        }

        @Override
        protected void onPrepareDialog(int id, Dialog dialog) {
            super.onPrepareDialog(id, dialog);
            switch (id) {
                case DATE_DIALOG_ID:
                    ((DatePickerDialog) dialog).updateDate(activeDate.get(Calendar.YEAR), activeDate.get(Calendar.MONTH), activeDate.get(Calendar.DAY_OF_MONTH));
                    break;
            }
        }


}

simply make boolean variable in mainActivity like this ::

private boolean startDateOrEndDAte = true;

then make the listeners for the buttons like this like this and make the value of the variable change for evrey button::

DialogFragment datePicker = new DatePickerFragment();

attendDate.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                datePicker.show(getSupportFragmentManager(),"Date Picker");
                startOrEnd = true ;
            }
        });
        leaveDate.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                datePicker.show(getSupportFragmentManager(),"Date Picker");
                startOrEnd = false ;
            }
        });

then in onDateSet methode just add if statment like this ::

public void onDateSet(DatePicker view, int year, int month, int dayOfMonth) {



    Calendar c = Calendar.getInstance();
    c.set(Calendar.YEAR, year);
    c.set(Calendar.MONTH, month);
    c.set(Calendar.DAY_OF_MONTH, dayOfMonth);
    String date = DateFormat.getDateInstance().format(c.getTime());
    attendDate = findViewById(R.id.attend_date);
    leaveDate = findViewById(R.id.leave_date);

    if (startOrEnd) {
        attendDate.setText(date);
    } else {
        leaveDate.setText(date);
    }
}

I was not satisfied with any of the aforementioned solutions so I made my own as follows: https://gist.github.com/JoachimR/f82b2b371b1ced4a09918c970e045d4f

import android.app.DatePickerDialog
import android.app.Dialog
import android.os.Bundle
import android.support.v4.app.DialogFragment
import java.util.*


class ChooseDayDialog : DialogFragment() {

    companion object {

        private val KEY_INITIAL_TIMESTAMP = "KEY_INITIAL_TIMESTAMP"
        private val KEY_REQUEST_CODE = "KEY_REQUEST_CODE"

        private val DEFAULT_REQUEST_CODE = 20

        fun createInstance(initialTimestamp: Long,
                           requestCode: Int = DEFAULT_REQUEST_CODE) =
                ChooseDayDialog().apply {
                    arguments = Bundle().apply {
                        putLong(KEY_INITIAL_TIMESTAMP, initialTimestamp)
                        putInt(KEY_REQUEST_CODE, requestCode)
                    }
                }

    }

    interface OnDayChosenListener {

        fun onDayChosen(requestCode: Int, year: Int, month: Int, dayOfMonth: Int)

    }

    private lateinit var listener: OnDayChosenListener

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        val activity = activity
        if (activity is OnDayChosenListener) {
            listener = activity
        } else {
            throw IllegalStateException("Activity must implement OnDayChosenListener")
        }
    }

    override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
        val timestamp = arguments?.getLong(KEY_INITIAL_TIMESTAMP, -1L) ?: -1L
        if (timestamp == -1L) {
            throw IllegalStateException("no initial time given")
        }
        val requestCode = arguments?.getInt(KEY_REQUEST_CODE, DEFAULT_REQUEST_CODE)
                ?: DEFAULT_REQUEST_CODE

        val calendar = Calendar.getInstance().apply {
            timeInMillis = timestamp
        }
        return DatePickerDialog(activity,
                DatePickerDialog.OnDateSetListener { _, year, month, dayOfMonth ->
                    listener.onDayChosen(requestCode, year, month, dayOfMonth)
                },
                calendar.get(Calendar.YEAR),
                calendar.get(Calendar.MONTH),
                calendar.get(Calendar.DAY_OF_MONTH))
    }

}
Jabbir Basha

you can just use the following code

@Override
protected Dialog onCreateDialog(int id) {
    /*
     * final Dialog d = new Dialog(this); d.set
     */

    switch (id) {
    case DATE_DIALOG_ID:
        return new DatePickerDialog(this,
                android.R.style.Theme_Holo_Light_Dialog_MinWidth,
                mDateSetListener, cmYear, cmMonth, cmDay);

    }
    return null;
}

private DatePickerDialog.OnDateSetListener mDateSetListener = new DatePickerDialog.OnDateSetListener() {
    @Override
    public void onDateSet(DatePicker view, int year, int monthOfYear,
            int dayOfMonth) {
        cmYear = year;
        cmMonth = monthOfYear;
        cmDay = dayOfMonth;
        updateDisplay();
    }
};

private void updateDisplay() {

    String date_check = ""
            + new StringBuilder()
                    // Month is 0 based so add 1
                    .append(cmYear).append("-").append(cmMonth + 1)
                    .append("-").append(cmDay).append(" ");
}

you can call on Dialog in any onclick

showDialog(DATE_DIALOG_ID);

where DATE_DIALOG_ID is declared as

static final int DATE_DIALOG_ID = 0;

I hope this is useful.

try this code.From and To are buttons when on clicked shows different date picker dialog and the selected date is then used to set the Text views

   From.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
           // new DatePickerDialog(TripPlanner.this, from_dateListener, from_year, from_month, from_day).show();


  new DatePickerDialog(TripPlanner.this, R.style.DialogTheme, new DatePickerDialog.OnDateSetListener() {
                @Override
                public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
                    //DO SOMETHING

                    Fromdate.setText(String.valueOf(dayOfMonth)+"/"+String.valueOf(monthOfYear+1)+"/"+String.valueOf(year));

                }
            }, 2015, 02, 26).show();


        }
    });




  To.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {




        new DatePickerDialog(TripPlanner.this, R.style.DialogTheme, new DatePickerDialog.OnDateSetListener() {
            @Override
            public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
                //DO SOMETHING

                Todate.setText(String.valueOf(dayOfMonth)+"/"+String.valueOf(monthOfYear+1)+"/"+String.valueOf(year));





            }
        }, 2015, 02, 26).show();





    }
});
Adarsh Sahu
    issue.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Bundle bundle = new Bundle();
            bundle.putInt("DATE", 1);

            DialogFragment newFragment = new MyDatePickerFragment();
            newFragment.setArguments(bundle);
            newFragment.show(getSupportFragmentManager(), "datePicker");
        }
    });

    expiry.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Bundle bundle = new Bundle();
            bundle.putInt("DATE", 2);

            DialogFragment newFragment = new MyDatePickerFragment();
            newFragment.setArguments(bundle);
            newFragment.show(getSupportFragmentManager(), "datePicker");

        }
    });

}


@Override
public void sendInput(String input, int id) {
    date = input;
    switch (id) {
        case 1:
            issue.setText(date);
            break;
        case 2:
            expiry.setText(date);
            break;
    }




public class MyDatePickerFragment extends DialogFragment implements DatePickerDialog.OnDateSetListener {

    static final int ISSUE_DATE = 1;
    static final int EXPIRY_DATE = 2;

    private int mChosenDate;

    int cur = 0;


    @Override
    public void onDateSet(DatePicker datePicker, int year, int month, int day) {

        String date;
        if (cur == ISSUE_DATE) {
            // set selected date into textview

            Log.v("Date Issue", "Date1 : " + new StringBuilder().append(month + 1)
                    .append("-").append(day).append("-").append(year)
                    .append(" "));
            date = day + "/0" + (month + 1) + "/" + year;
        } else {
            Log.v("Date expiry", "Date2 : " + new StringBuilder().append(month + 1)
                    .append("-").append(day).append("-").append(year)
                    .append(" "));
            date = day + "/0" + (month + 1) + "/" + year;

        }
        listenerforActivity.sendInput(date, cur);
    }

    public interface OnDateSetListenerInterface {
        void sendInput(String input, int id);
    }

    public OnDateSetListenerInterface listenerforActivity;

    @Override
    public void onAttach(Context context) {
        super.onAttach(context);
        try {
            listenerforActivity = (OnDateSetListenerInterface) getActivity();
        } catch (ClassCastException e) {
            Toast.makeText(context, e.toString(), Toast.LENGTH_SHORT).show();
        }
    }

    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {

        // Use the current date as the default date in the picker
        final Calendar c = Calendar.getInstance();
        int year = c.get(Calendar.YEAR);
        int month = c.get(Calendar.MONTH);
        int day = c.get(Calendar.DAY_OF_MONTH);


        Bundle bundle = this.getArguments();
        if (bundle != null) {
            mChosenDate = bundle.getInt("DATE", 1);
        }


        switch (mChosenDate) {

            case ISSUE_DATE:
                cur = ISSUE_DATE;
                return new DatePickerDialog(getActivity(), this, year, month, day);

            case EXPIRY_DATE:
                cur = EXPIRY_DATE;
                return new DatePickerDialog(getActivity(), this, year, month, day);

        }
        return null;
    }


}

My solution for this was simply using a switch

public class RegisterActivity extends AppCompatActivity implements DatePickerDialog.OnDateSetListener {
private TextView mDisplayBirthDay;
private TextView mDisplayExpDate;
private TextView mDisplayIssueDate;
private int sw;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_register);
    Toolbar toolbar = findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);
    Objects.requireNonNull(getSupportActionBar()).setDisplayShowTitleEnabled(false); // to get rid of the title of the activity
    Objects.requireNonNull(getSupportActionBar()).setDisplayHomeAsUpEnabled(true);

    mDisplayBirthDay = findViewById(R.id.birthDate);
    findViewById(R.id.birthDate).setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            showDatePickerDialog();
            sw = 0;
        }
    });
    mDisplayExpDate = findViewById(R.id.editText_expire);
    findViewById(R.id.editText_expire).setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            showDatePickerDialog();
            sw = 1;
        }
    });
    mDisplayIssueDate = findViewById(R.id.editText_issueDate);
    findViewById(R.id.editText_issueDate).setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            showDatePickerDialog();
            sw = 2;
        }
    });
}
private  void showDatePickerDialog(){
    DatePickerDialog datePickerDialog = new DatePickerDialog(this,
            this,
            Calendar.getInstance().get(Calendar.YEAR),
            Calendar.getInstance().get(Calendar.MONTH),
            Calendar.getInstance().get(Calendar.DAY_OF_MONTH));
    datePickerDialog.show();
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
        case R.id.show_registrations:
            getSupportFragmentManager().beginTransaction().replace(R.id.event_description,
                    //TODO: pass eventID as intend when clicked on event
                    EventRegistration.newInstance(69)).commit();
            break;
        case R.id.visibility_event:

            break;
        case android.R.id.home:
            onBackPressed(); //handling the "back" button
            break;
        default:
    }
    return true;
}

@Override
public void onDateSet(DatePicker view, int year, int month, int dayOfMonth) {
    month = month + 1;  //because January is the month 0
    String date = dayOfMonth + "/" + month + "/" + year;
    switch (sw){
        case 0:
            mDisplayBirthDay.setText(date);
            break;
        case 1:
            mDisplayExpDate.setText(date);
            break;
        case 2:
            mDisplayIssueDate.setText(date);
            break;
        default:
    }

}

}

You can simply use a boolean flag variable to determine the view you are making the call from.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!