片段代码的活动。 lam在将活动中曾经有效的代码移至片段时遇到挑战

问题描述 投票:0回答:1

应用使用“活动”正在正常运行。现在我将相同的代码从“活动”移动到“片段”。所有视图,例如TextView,都在Activity 1的updateUI()方法上,然后将其移动到Fragment中的onCreateView。更改为分割应用程序不再提交,当您单击提交按钮时,它会不断旋转/缓冲。我已尽力而为,但我没有成功。下面是我的片段代码。

公共类BronzeFragment扩展Fragment实现View.OnClickListener {

EditText nameField, surnameField, emailField, yourPhoneField,eventsDurationField,numberOfGuestsField, addressField,
        specifyField, additionalDetailsField;

CheckBox mrField, mrsField, missField, friendField,youtubeField,websiteField,vimeoField,internetField,
        googleField,otherField, lodgeGuestHouseField, gardenWeddingField, corporateEventField,
        partyField, photoShootField, otherServiceField;


AwesomeValidation awesomeValidation;
Button buttonAddItem;

//these two are for the DatePickerDialog popup to your android app
private TextView mDisplayDate;
private DatePickerDialog.OnDateSetListener mDateSetListener;



public BronzeFragment() {
    // Required empty public constructor
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    View rootView = inflater.inflate(R.layout.bronze_fragment, container, false);


   // getting the views using the rootView
  nameField = (EditText)rootView.findViewById(R.id.Name_field);
    surnameField = (EditText)rootView.findViewById(R.id.surname_field);
    emailField = (EditText)rootView.findViewById(R.id.email_field);
    yourPhoneField = (EditText)rootView.findViewById(R.id.Phone_field);
    mDisplayDate = (EditText)rootView.findViewById(R.id.choose_event_date);
    eventsDurationField = (EditText)rootView.findViewById(R.id.event_duration);
    numberOfGuestsField = (EditText)rootView.findViewById(R.id.number_of_guests);
    addressField = (EditText)rootView.findViewById(R.id.address_field);
    mrField = (CheckBox)rootView.findViewById(R.id.mr_field);
    mrsField = (CheckBox)rootView.findViewById(R.id.mrs_field);
    missField = (CheckBox)rootView.findViewById(R.id.miss_field);
    friendField = (CheckBox)rootView.findViewById(R.id.friend);
    youtubeField = (CheckBox)rootView.findViewById(R.id.youtube);
    websiteField = (CheckBox)rootView.findViewById(R.id.website);
    vimeoField = (CheckBox)rootView.findViewById(R.id.vimeo);
    internetField = (CheckBox)rootView.findViewById(R.id.internet);
    googleField = (CheckBox)rootView.findViewById(R.id.google);
    otherField = (CheckBox)rootView.findViewById(R.id.other);
    specifyField = (EditText)rootView.findViewById(R.id.specify);
    lodgeGuestHouseField = (CheckBox)rootView.findViewById(R.id.lodge_guest_house);
    gardenWeddingField = (CheckBox)rootView.findViewById(R.id.garden_wedding);
    corporateEventField = (CheckBox)rootView.findViewById(R.id.corporate_event);
    partyField = (CheckBox)rootView.findViewById(R.id.party);
    photoShootField = (CheckBox)rootView.findViewById(R.id.photo_shoot);
    otherServiceField = (CheckBox)rootView.findViewById(R.id.other_service);
    additionalDetailsField = (EditText)rootView.findViewById(R.id.additional_details);
    buttonAddItem = (Button) rootView.findViewById(R.id.btn_add_item);


    //setting the Main Activity Title Programmatically to apply only on this Activity,
    // ie making it different from the App name & other activities
    // getSupportActionBar().setTitle("Tholumzi Guest House Booking");




    //Declaring the awesomeValidation type "BASIC"
    awesomeValidation = new AwesomeValidation(ValidationStyle.BASIC);


    //validating the views
    awesomeValidation.addValidation(nameField, "[a-zA-Z\\s]+", "Enter your name");
    awesomeValidation.addValidation(surnameField, "[a-zA-Z\\s]+", "Enter your surname");
    awesomeValidation.addValidation(emailField, "^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$", "Enter valid email address");
    awesomeValidation.addValidation(yourPhoneField, "[0-9]+", "your phone number eg 078 123...");
    awesomeValidation.addValidation(numberOfGuestsField, "[0-9]+", "Number of guests eg 50");

    updateUI(); // NB: this method is called up here within the OnCreate

    return rootView;


}



//finding View by Id from the relevant xml View for both EditText and CheckBoxes
private void updateUI() {

    //processing DatePickerDialog popup to your android app
    mDisplayDate.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Calendar cal = Calendar.getInstance();
            int day = cal.get(Calendar.DAY_OF_MONTH);
            int month = cal.get(Calendar.MONTH);
            int year = cal.get(Calendar.YEAR);



            DatePickerDialog dialog = new DatePickerDialog(
                    getActivity(),
                    android.R.style.Theme_Holo_Light_Dialog_MinWidth,
                    mDateSetListener,
                    year,month,day);
            dialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
            dialog.show();
        }
    });

    mDateSetListener = new DatePickerDialog.OnDateSetListener() {
        @Override
        public void onDateSet(DatePicker datePicker, int year, int month, int day) {
            month = month + 1;

            //choose how it will appear, ie "dd/mm/yyyy"
            String date = day + "/" + month + "/" + year;
            mDisplayDate.setText(date);
        }
    };




    //this is the submit button called and initialized by its Id from the View
    //buttonAddItem = (Button) layoutView.findViewById(R.id.btn_add_item);
    buttonAddItem.setOnClickListener(this);


}



//This is the part where data is transferred from Your Android phone to Sheet
// by using HTTP Rest API calls (Volley Library)
//Volley Library - ie our networking Library
private void addItemToSheet() {
    // the "true, true" at the end of ProgressDialog method makes it possible to cancel the auto loading of the
    // submiting dialogue box eg especially due to lack of connectivity on  the device. it cancels back to the MainActivity still
    // with all the information still intact, meaning you can re-submit again.
    final ProgressDialog loading = ProgressDialog.show(getActivity(), "Submitting information...", "if it's taking too long, check your Network and Internet connectivity",true,true);
    final String studentname = nameField.getText().toString().trim(); //converting EditText View to String
    final String surname = surnameField.getText().toString().trim(); //converting EditText View to String
    final String email = emailField.getText().toString().trim(); //converting EditText View to String
    final String yourphonenumber = yourPhoneField.getText().toString().trim(); //converting EditText View to String
    final String date = mDisplayDate.getText().toString().trim(); //converting EditText View to String
    final String eventsduration = eventsDurationField.getText().toString().trim(); //converting EditText View to String
    final String numberofguests = numberOfGuestsField.getText().toString().trim(); //converting EditText View to String
    final String address = addressField.getText().toString().trim(); //converting EditText View to String
    final String specify = specifyField.getText().toString().trim();// converting EditText View to String
    final String additionaldetails = additionalDetailsField.getText().toString().trim(); //converting EditText View to String

    //processing Checkboxes
    boolean mr = mrField.isChecked(); // check if Mr Checkbox field is checked.
    final String mr_checkbox = String.valueOf(mr); //converting checkbox to String

    boolean mrs = mrsField.isChecked(); //check if Mrs checkbox field is checked
    final String mrs_checkbox = String.valueOf(mrs);// converting checkbox to String

    boolean miss = missField.isChecked(); //check if Miss checkbox field is checked
    final String miss_checkbox = String.valueOf(miss); // converting checkbox to String

    boolean mFriend = friendField.isChecked(); //check if firsttimevisitoryesfield checkbox field is checked
    final String friend_checkbox = String.valueOf(mFriend); // converting checkbox to String

    boolean mYoutube = youtubeField.isChecked(); //check if youtube checkbox field is checked
    final String youtube_checkbox = String.valueOf(mYoutube); // converting checkbox to String

    boolean mWebsite = websiteField.isChecked(); //check if website checkbox field is checked
    final String website_checkbox = String.valueOf(mWebsite);// converting checkbox to String

    boolean mVimeo = vimeoField.isChecked(); //check if vimeo checkbox field is checked
    final String vimeo_checkbox = String.valueOf(mVimeo);// converting checkbox to String

    boolean mInternet = internetField.isChecked(); //check if internet checkbox field is checked
    final String internet_checkbox = String.valueOf(mInternet); // converting checkbox to String

    boolean mGoogle = googleField.isChecked(); //check if google checkbox field is checked
    final String google_checkbox = String.valueOf(mGoogle); // converting checkbox to String

    boolean mOther = otherField.isChecked();
    final String other_checkbox = String.valueOf(mOther);

    boolean mlodgeGuestHouse = lodgeGuestHouseField.isChecked(); //if Lodge/Guest House checkbox field is checked
    final String lodgegusethouse_checkbox = String.valueOf(mlodgeGuestHouse); // converting checkbox to String

    boolean mGardenWedding = gardenWeddingField.isChecked(); //if garden wedding checkbox field is checked
    final String gardenwedding_checkbox = String.valueOf(mGardenWedding); // converting checkbox to String

    boolean mCorporateEvent = corporateEventField.isChecked(); //if Corporate Event checkbox field is checked
    final String corporateevent_checkbox = String.valueOf(mCorporateEvent);// converting checkbox to String

    boolean mParty = partyField.isChecked(); //if party checkbox field is checked
    final String party_checkbox = String.valueOf(mParty); // converting checkbox to String

    boolean mPhotoShoot = photoShootField.isChecked(); //if photo shoot checkbox field is checked
    final String photoshoot_checkbox = String.valueOf(mPhotoShoot); // converting checkbox to String

    boolean mOtherServiceField = otherServiceField.isChecked(); //if Other Service checkbox field is checked
    final String otherservice_checkbox = String.valueOf(mOtherServiceField); // converting checkbox to String


    // we pass the google sheet url address from your Google Drive Apps script
    StringRequest stringRequest = new StringRequest(Request.Method.POST, "//google app script url" ,
            new Response.Listener<String>() {
                @Override
                public void onResponse(String response) {


                    loading.dismiss();
                    //fetches the "success" message from the google app script after the success data submission to excel
                    Toast.makeText(getActivity(), response, Toast.LENGTH_LONG).show();
                    //opens thank you activity after successful submission
                    Intent intent = new Intent(getActivity(), Thankyou.class);
                    startActivity(intent);


                }

            },


            new Response.ErrorListener() {
                @Override
                public void onErrorResponse(VolleyError error) {


                }
            }
    )

            // HashMap library starts here. We use it for Key - value mapping
    {
        @Override
        protected Map<String, String> getParams() {
            Map<String, String> parmas = new HashMap<>();

            //here we pass params
            // "K: key" eg YourPhoneNumber is the one you are going to use as reference on your App Script in google drive
            //and Postman. and this Key is not found anywhere else in the code except here

            //"v: value" eg yourphonenumber is the variable we declared ontop on addItemToSheet() method for this field
            parmas.put("action", "addItem");
            parmas.put("Name", studentname);
            parmas.put("Surname", surname);
            parmas.put("Email",email);
            parmas.put("YourPhoneNumber", yourphonenumber);
            parmas.put("YourChosenDate",date);
            parmas.put("EventsDuration",eventsduration);
            parmas.put("NumberOfGuests",numberofguests);
            parmas.put("Address", address);
            parmas.put("Mr",mr_checkbox);
            parmas.put("Mrs", mrs_checkbox);
            parmas.put("Miss", miss_checkbox);
            parmas.put("Friend", friend_checkbox);
            parmas.put("Youtube", youtube_checkbox);
            parmas.put("Website",website_checkbox);
            parmas.put("Vimeo",vimeo_checkbox);
            parmas.put("Internet",internet_checkbox);
            parmas.put("Google",google_checkbox);
            parmas.put("Other",other_checkbox);
            parmas.put("Specify",specify);
            parmas.put("Lodge_Guest_House", lodgegusethouse_checkbox);
            parmas.put("Garden_Wedding", gardenwedding_checkbox);
            parmas.put("Corporate_Event", corporateevent_checkbox);
            parmas.put("Party", party_checkbox);
            parmas.put("Photo_Shoot", photoshoot_checkbox);
            parmas.put("Other_Service", otherservice_checkbox);
            parmas.put("AdditionalDetails", additionaldetails);

            return parmas;
        }
    };

    int socketTimeOut = 50000;// u can change this .. here it is 50 seconds
    RetryPolicy retryPolicy = new DefaultRetryPolicy(socketTimeOut, 0, DefaultRetryPolicy.DEFAULT_BACKOFF_MULT);
    stringRequest.setRetryPolicy(retryPolicy);
    RequestQueue queue = Volley.newRequestQueue(getActivity());
    queue.add(stringRequest);

}

//this is the Onclick listerner which submits data ONLY if all the fields have been validated
//and found to be not empty and have the correct data format
@Override
public void onClick(View v) {

    // use the below commented method to submit to Google Spread Sheet "WITHOUT" Validation.
    // it simply says, when the submit button is clicked, Submit data.

    /* if (v == buttonAddItem) {
        addItemToSheet();
        //Define what to do when button is clicked
    }*/

//此if语句检查所有字段是否均已通过验证,然后添加到Google工作表中如果(awesomeValidation.validate()){

        addItemToSheet(); // Adds data to google excel sheet

        //shows briefly as soon as you press Submit button after successful validation
        Toast.makeText(getActivity(), "Submitting Data", Toast.LENGTH_SHORT).show();

    }else{//else if the validation doesnt pass, you get this "Error!" Toast message.

        Toast.makeText(getActivity(), "Please enter your Contact Details First!", Toast.LENGTH_LONG).show();

    }

}

}

android android-fragments
1个回答
0
投票

片段需要包含一个活动。由于您尚未发布代码,因此我不知道您是否已将代码添加到要在活动中添加/替换片段的位置。我已经共享了有关片段如何工作的参考文档。

这里是Documentation开头几行的要点

片段代表行为或用户界面中的一部分FragmentActivity。您可以将多个片段合并为一个活动以构建多窗格UI并重用多个片段活动。您可以将片段视为具有自己生命周期的活动接收自己的输入事件,以及您可以在活动运行时添加或删除的内容(包括就像您可以在其他活动中重复使用的“子活动”。

片段必须始终托管在活动中,并且片段的生命周期直接受宿主活动的生命周期影响。对于例如,当活动暂停时,其中的所有片段也都暂停了,并且当活动被销毁时,所有碎片也会被销毁。但是,虽然活动正在运行(处于恢复的生命周期状态),您可以独立操作每个片段,例如添加或删除它们。执行此类片段交易时,您也可以将其添加到由活动管理的后向堆栈-活动是发生的碎片交易的记录。的后退堆栈允许用户撤消片段交易(导航向后),方法是按“后退”按钮。

当您将片段添加为活动布局的一部分时,它位于活动的视图层次结构和片段中的ViewGroup定义自己的视图布局。您可以将片段插入通过在活动布局中声明片段来声明活动布局文件,作为元素,或者通过添加您的应用程序代码到现有的ViewGroup。

希望这有所帮助!

© www.soinside.com 2019 - 2024. All rights reserved.