如何将警报框值传递给片段

时间:2015-09-01 05:31:50

标签: java android

我有两个java文件,一个是片段,另一个是DialogFragment。在我的应用程序中我显示带单选按钮的警报框。如果用户选择任何选项,我想将该项传递给片段(地址片段)。我写了一些代码显示警告框。但是,我无法将该项目传递给地址片段..

请有人帮帮我!

我的代码在这里......

AddressFragment.java:

public class AddressFragment extends Fragment implements RadioListAlert.AddressListener {

    int position = 0;

    EditText line1;
    EditText line2;
    EditText landmark;
    AutoCompleteTextView cityText;
    EditText zipcode;
    Spinner country;
    Spinner state;
    RadioGroup tag;
    Button savaddr;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {

        View view = inflater.inflate(R.layout.fragment_layout_address, container, false);

        savaddr = (Button) view.findViewById(R.id.addrsave);
        tag = (RadioGroup) view.findViewById(R.id.radioGroup);
        line1 = (EditText) view.findViewById(R.id.line1);
        line2 = (EditText) view.findViewById(R.id.line2);
        cityText = (AutoCompleteTextView) view.findViewById(R.id.city_autoCompleteTextView);
        zipcode = (EditText) view.findViewById(R.id.zipcode);
        country = (Spinner) view.findViewById(R.id.countrySpinner);
        state = (Spinner) view.findViewById(R.id.stateSpinner);
        landmark = (EditText) view.findViewById(R.id.landmark);

       

        // Get a reference to the AutoCompleteTextView in the layout
        AutoCompleteTextView textView = (AutoCompleteTextView) view.findViewById(R.id.city_autoCompleteTextView);
        // Get the string array
        String[] city = getResources().getStringArray(R.array.city);
        // Create the adapter and set it to the AutoCompleteTextView
        ArrayAdapter<String> adapter = new ArrayAdapter<String>(getActivity(), android.R.layout.simple_list_item_1, city);

        textView.setAdapter(adapter);


        savaddr.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                String addr1 = line1.getText().toString();
                String addr2 = line2.getText().toString();
                String addr_city = cityText.getText().toString();
                String addr_zipcode = zipcode.getText().toString();
                String addr_country = country.getSelectedItem().toString();
                String addr_state = state.getSelectedItem().toString();

                //Field Validation

                if (Utility.isNotNull(addr1) && Utility.isNotNull(addr2) && Utility.isNotNull(addr_city) && Utility.isNotNull(addr_zipcode) && Utility.isNotNull(addr_country) && Utility.isNotNull(addr_state)) {
                    if (Utility.line2_validate(addr2)) {
                        if (Utility.line2_validate(addr_city)) {

                            Toast.makeText(getActivity().getApplicationContext(), "Success.", Toast.LENGTH_SHORT).show();
                            new RadioListAlert().setListener(this).show(getActivity().getFragmentManager(), "Radio Alert");// I got error in this line setListener(this)


                        } else {
                            cityText.setError("Enter valid City");
                        }
                    } else {
                        line2.setError("Enter valid Address");
                    }
                } else {
                    Toast.makeText(getActivity().getApplicationContext(), "Please fill the form, don't leave any field blank", Toast.LENGTH_SHORT).show();
                }
            }
        });


        return view;

    }


    @Override
    public void itemClicked(String text) {
        TextView tv = (TextView) getActivity().findViewById(R.id.tv_android);

        /** Setting the selected android version in the textview */
        tv.setText("Your Choice : " + text);

    }
}

RadioListAlert.java:

public class RadioListAlert extends DialogFragment {

    CharSequence[] tag = { "BMW", "AUDI", "MERCEDES", "FERRARI", "SKODA" };
    private AddressListener addressListener;
    private String itemClicked;


    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {

        AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
        builder.setCancelable(true);
        builder.setTitle("Tag Your Car").setSingleChoiceItems(tag, -1,
                new DialogInterface.OnClickListener() {

                    @Override
                    public void onClick(DialogInterface dialog, int which)
                    {
                        Toast.makeText(getActivity(), tag[which],Toast.LENGTH_SHORT).show();
                        itemClicked = (String) tag[which];
                    }
                }).setPositiveButton("Ok", new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialogInterface, int i) {
                if (addressListener != null)
                    addressListener.itemClicked(itemClicked);
                //to dismiss the dialog after user choose an item and click ok, you can also add some validation before dismissing the dialog
                dismiss();
            }
        }).setNegativeButton("Cancel",new DialogInterface.OnClickListener(){

            @Override
            public void onClick(DialogInterface dialog, int which) {
                dismiss();
            }
        });
        return builder.create();
    }

    public void setListener(AddressListener addressListener)
    {
        this.addressListener = addressListener;
    }




   public interface AddressListener
    {
        void itemClicked(String text);
    }
}

我在地址片段中的这行中出错:

new RadioListAlert()。setListener(this).show(getActivity()。getFragmentManager(),“Radio Alert”); 特别是.setListener( this

抛出错误:

setListener(RadioListAlert.AddressListener) in RadioListAlert cannot be applied to (anonymous android.view.View.OnClickListener)

请有人帮助我!

提前致谢!!

1 个答案:

答案 0 :(得分:0)

  RadioListAlert中的

setListener(RadioListAlert.AddressListener)不能   应用于(匿名android.view.View.OnClickListener)

由于将onClick方法上下文传递给setListener方法,但需要的是当前正在实现AddressListener接口的类的上下文:

new RadioListAlert().setListener(AddressFragment.this).show(
                        getActivity().getFragmentManager(), "Radio Alert");