的ShowDialog(DIALOG_EXIT);错误

时间:2017-03-26 16:51:05

标签: android android-alertdialog oncreate showdialog

我做错了什么?

我想显示一个AlertDialog - “或关闭一个应用程序”给我一个错误

Error:(141, 9) error: cannot find symbol method showDialog(int)

enter image description here

我该怎么办?

public class ZavdanFragment extends Fragment {

    //аргумент індиф.
    private static final String ARG_ZAMOV_ID = "zamov_id";
    //мітка діалогу календаря
    private static final String DIALOG_DATE = "DialogDate";
    //мітка діалогу Фото
    private static final String DIALOG_FOTO = "DialogFoto";
    //private static final String DIALOG_EXIT = "DialogExit";
    //призначення цільового фрагменту
    private static final int REQUEST_DATE = 0;
    //Контакти
    private static final int REQUEST_CONTACT = 1;
    //камера
    private static final int REQUEST_PHOTO = 2;
    //тел
    private static final int REQUEST_PERMISSION = 3;
    private static final int DIALOG_EXIT = 4;

    private Zavdannya mZavdannya;
    private EditText mTitleField; //назва замов.
    private EditText mPrice; //ціна замов.
    private Button mDateButton; // дата замов.
    private CheckBox mVikonanoCheckBox; //виконання замов.
    private CheckBox mTerminovoCheckBox; //термінове замов.
    private CheckBox mOplataCheckBox; //оплачене замов.
    private Button mRepostButton; //відправка звіту
    private Button mContactButton; //список контактів
    private ImageButton mPhotoButton; //кнопка фото
    private ImageView mPhotoView; //фото
    private File mPhotoFile;//фото
    private Point mPhotoViewSize;//вікно фото
    private Callbacks mCallbacks;
    private Spinner mSpinnerWork;
    //зателефонувати
    private Button mCallContact;
    private String mCallID;

    //обовязковий інтерфейс для активності-хоста
    public interface Callbacks {
        void onZamovUpdated(Zavdannya zavdannya);
    }

    //аргументи індетифікатора
    public static ZavdanFragment newInstance(UUID zamovId) {
        Bundle args = new Bundle();
        args.putSerializable(ARG_ZAMOV_ID, zamovId);

        ZavdanFragment fragment = new ZavdanFragment();
        fragment.setArguments(args);
        return fragment;
    }

    @Override
    public void onAttach(Activity activity) {
        super.onAttach(activity);
        mCallbacks = (Callbacks) activity;
    }

    //зберегти і передати інд. замов.
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //отримати індетифікатор
        UUID zamovId = (UUID) getArguments().getSerializable(ARG_ZAMOV_ID);
        mZavdannya = ZamovLab.get(getActivity()).getZavdannya(zamovId);
        //збереження місцезнахоження фото
        mPhotoFile = ZamovLab.get(getActivity()).getPhotoFile(mZavdannya);
        //menu
        setHasOptionsMenu(true);
    }

    //запис оновлення
    @Override
    public void onPause() {
        super.onPause();
        ZamovLab.get(getActivity()).updateZamov(mZavdannya);
    }


    @Override
    public void onDetach() {
        super.onDetach();
        mCallbacks = null;
    }

    public void onclick(View v){
        showDialog(DIALOG_EXIT);
    }

    protected Dialog onCreateDialog(int id) {
        Dialog dialog = null;
        android.app.AlertDialog.Builder builder = new android.app.AlertDialog.Builder(getActivity());

        switch (id){
            case DIALOG_EXIT:
                return new AlertDialog.Builder(getActivity())
                        .setTitle(R.string.exit)
                        .setCancelable(false)
                        .setMessage(R.string.dial)
                        .setPositiveButton(android.R.string.yes, new DialogInterface.OnClickListener() {
                            @Override
                            public void onClick(DialogInterface dialog, int which) {
                                android.os.Process.killProcess(android.os.Process.myPid());
                            }
                        })
                        .setNegativeButton(android.R.string.no, new DialogInterface.OnClickListener() {
                            @Override
                            public void onClick(DialogInterface dialog, int which) {
                                dialog.cancel();
                            }
                        })
                        .create();
        }
        dialog = builder.show();
        return dialog;
    }

    //меню видалити
    @Override
    public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
        super.onCreateOptionsMenu(menu, inflater);
        inflater.inflate(R.menu.fragment_zamov, menu);
    }

    //дії при виборі меню
    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
            //видалити
            case R.id.menu_item_delete_zamov:
                ZamovLab.get(getActivity()).removeZamov(mZavdannya);
                getActivity().finish();
                return true;
            case R.id.menu_item_exit:
                onCreateDialog(DIALOG_EXIT);
                return true;

            default:
                return super.onOptionsItemSelected(item);
        }
    }



    @Override
    // розмітка (замовлення)
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        View v = inflater.inflate(R.layout.fragment_zamov,
                container, false);
        //назва замов.
        mTitleField = (EditText) v.findViewById(R.id.zamov_title);
        mTitleField.setText(mZavdannya.getTitle());//оновити назву
        mTitleField.addTextChangedListener(new TextWatcher() {
            @Override
            public void beforeTextChanged(
                    CharSequence s, int start, int count, int after) {
            }

            // введення заголовку замов.
            @Override
            public void onTextChanged(
                    CharSequence s, int start, int before, int count) {
                mZavdannya.setTitle(s.toString());
                updateZamov();
            }

            @Override
            public void afterTextChanged(Editable s) {
            }
        });
        //список
        mSpinnerWork = (Spinner) v.findViewById(R.id.spinner_work);
        ArrayAdapter<CharSequence> dataAdapter = ArrayAdapter.createFromResource(
                getActivity().getApplicationContext(), R.array.catlist, android.R.layout.simple_spinner_item
        );
        dataAdapter.setDropDownViewResource(android.R.layout
                .simple_spinner_dropdown_item);
        mSpinnerWork.setAdapter(dataAdapter);
        mSpinnerWork.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
            @Override
            public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
                //відображення позиції
                String item = parent.getItemAtPosition(position).toString();
                Toast.makeText(parent.getContext(), "Вибрано: " + item, Toast.LENGTH_LONG).show();
            }

            @Override
            public void onNothingSelected(AdapterView<?> parent) {
            }
        });
        //mSpinnerWork.setOnItemSelectedListener((AdapterView.OnItemClickListener) this);
        /*List<String> work = new ArrayList<String>();
        work.add("11a");
        work.add("2a");
        work.add("5a");
        work.add("1a");
        work.add("2a");
        work.add("3a");
        work.add("4a");
        work.add("55a");
        ArrayAdapter<String> dataAdapter = new ArrayAdapter<String>(
                getActivity(), android.R.layout.simple_spinner_item, work
        );*/

        //ціна
        mPrice = (EditText) v.findViewById(R.id.zamov_title_prise);
        mPrice.setText(mZavdannya.getPrice());//оновити ціну
        mPrice.addTextChangedListener(new TextWatcher() {
            @Override
            public void beforeTextChanged(
                    CharSequence s, int start, int count, int after) {
            }

            @Override
            public void onTextChanged(
                    CharSequence s, int start, int before, int count) {
                mZavdannya.setPrice(s.toString());
                updateZamov();
            }

            @Override
            public void afterTextChanged(Editable s) {
            }
        });

        //дата
        mDateButton = (Button) v.findViewById(R.id.zamov_date);
        updateDate();
        //виклик діал. вікна при натискані на дату
        mDateButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                FragmentManager manager = getFragmentManager();
                //виклик newInstance
                DatePickerFragment dialog = DatePickerFragment
                        .newInstance(mZavdannya.getDate());
                dialog.setTargetFragment(ZavdanFragment.this, REQUEST_DATE);
                dialog.show(manager, DIALOG_DATE);
            }
        });
        //виконання
        mVikonanoCheckBox = (CheckBox) v.findViewById(R.id.zamov_vikonano);
        mVikonanoCheckBox.setChecked(mZavdannya.isVikonano());//оновити прапорець
        mVikonanoCheckBox.setOnCheckedChangeListener(new CompoundButton
                .OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(
                    CompoundButton buttonView, boolean isChecked) {
                //Прапорець виконання
                mZavdannya.setVikonano(isChecked);
                updateZamov();
            }
        });
        //оплаченно
        mOplataCheckBox = (CheckBox) v.findViewById(R.id.zamov_oplata);
        mOplataCheckBox.setChecked(mZavdannya.isOplata());//оновити прапорець
        mOplataCheckBox.setOnCheckedChangeListener(new CompoundButton
                .OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(
                    CompoundButton buttonView, boolean isChecked) {
                //Прапорець виконання
                mZavdannya.setOplata(isChecked);
                updateZamov();
            }
        });
        //терміново
        mTerminovoCheckBox = (CheckBox) v.findViewById(R.id.zamov_terminovo);
        mTerminovoCheckBox.setChecked(mZavdannya.isTerminovo());//оновити прапорець
        mTerminovoCheckBox.setOnCheckedChangeListener(new CompoundButton
                .OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(
                    CompoundButton buttonView, boolean isChecked) {
                //Прапорець виконання
                mZavdannya.setTerminovo(isChecked);
                updateZamov();
            }
        });
        //звіт про виконання
        mRepostButton = (Button) v.findViewById(R.id.zamov_repost);
        mRepostButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent i = new Intent(Intent.ACTION_SEND);
                i.setType("text/plain");
                i.putExtra(Intent.EXTRA_TEXT, getZamovRepost());
                i.putExtra(Intent.EXTRA_SUBJECT,
                        getString(R.string.zamov_repost_subject));
                i = Intent.createChooser(i, getString(R.string.send_repost));
                startActivity(i);
            }
        });
        //Вибір контакту
        final Intent pickContact = new Intent(Intent.ACTION_PICK,
                ContactsContract.Contacts.CONTENT_URI);
        // pickContact.addCategory(Intent.CATEGORY_HOME);//перевірка фільтра
        mContactButton = (Button) v.findViewById(R.id.zamov_contact);
        mContactButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //startActivityForResult(pickContact, REQUEST_CONTACT);
                //зчитати контакт
                int permissionCheck = ContextCompat.checkSelfPermission(getActivity(),
                        android.Manifest.permission.READ_CONTACTS);
                if (permissionCheck != PackageManager.PERMISSION_GRANTED) {
                    ZavdanFragment.this.requestPermissions(new String[]{
                            android.Manifest.permission.READ_CONTACTS
                    }, REQUEST_PERMISSION);
                } else {
                    startActivityForResult(pickContact, REQUEST_CONTACT);
                }
            }
        });
        if (mZavdannya.getContact() != null) {
            mContactButton.setText(mZavdannya.getContact());
        }
        //зателефонувати
        mCallContact = (Button) v.findViewById(R.id.call_contact_button);
        mCallContact.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (mCallID != null) {
                    Cursor cursor = getActivity().getContentResolver().query(
                            ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
                            new String[]{ContactsContract.CommonDataKinds.Phone.CONTACT_ID,
                                    ContactsContract.CommonDataKinds.Phone.NUMBER},
                            ContactsContract.CommonDataKinds.Phone.CONTACT_ID + " = ?",
                            new String[]{mCallID}, null);
                    try {
                        cursor.moveToFirst();
                        String phoneNumber = cursor.getString(cursor.getColumnIndex(
                                ContactsContract.CommonDataKinds.Phone.NUMBER));
                        Intent callContact = new Intent(Intent.ACTION_DIAL,
                                Uri.parse("tel:" + phoneNumber));
                        startActivity(callContact);
                    } finally {
                        cursor.close();
                    }
                } else {
                    Toast.makeText(getActivity().getApplicationContext(),
                            "Контакт не вибраний",
                            Toast.LENGTH_LONG).show();
                }
            }
        });

        //захист від контакних програм
        PackageManager packageManager = getActivity().getPackageManager();
        if (packageManager.resolveActivity(pickContact,
                PackageManager.MATCH_DEFAULT_ONLY) == null) {
            mContactButton.setEnabled(false);
        }

        //кнопка фото
        mPhotoButton = (ImageButton) v.findViewById(R.id.zamov_camera);
        final Intent captureImage = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
        boolean canTakePhoto = mPhotoFile != null && captureImage
                .resolveActivity(packageManager) != null;
        mPhotoButton.setEnabled(canTakePhoto);
        //вікно фото
        if (canTakePhoto) {
            Uri uri = Uri.fromFile(mPhotoFile);
            captureImage.putExtra(MediaStore.EXTRA_OUTPUT, uri);
        }
        mPhotoButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                startActivityForResult(captureImage, REQUEST_PHOTO);
            }
        });
        //фото
        mPhotoView = (ImageView) v.findViewById(R.id.zamov_photo);
        // updatePhotoView();
        mPhotoView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                FragmentManager manager = getFragmentManager();
                PhotoView dialog = new PhotoView();
                PhotoView.getPhotoFile(mPhotoFile);
                dialog.show(manager, DIALOG_FOTO);
            }
        });

        final ViewTreeObserver observer = mPhotoView.getViewTreeObserver();
        observer.addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
            @Override
            public void onGlobalLayout() {
                boolean isFirstPass = (mPhotoViewSize == null);
                mPhotoViewSize = new Point();
                mPhotoViewSize.set(mPhotoView.getWidth(), mPhotoView.getHeight());

                if (isFirstPass) updatePhotoView();
            }
        });

        return v;
    }

    //реакція на отриману інформацію дати в діал. вікні
    @Override
    public void onActivityResult(int requestCode, int resultCode,
                                 Intent data) {
        if (resultCode != Activity.RESULT_OK) {
            return;
        }
        if (requestCode == REQUEST_DATE) {
            Date date = (Date) data
                    .getSerializableExtra(DatePickerFragment.EXTRA_DATE);
            mZavdannya.setDate(date);
            updateZamov();
            updateDate();
        }//вибрати контакт
        else if (requestCode == REQUEST_CONTACT && data != null) {
            Uri contactUri = data.getData();
            //визначенняя поля які мають бути повернуті запитом
            String[] queryFields = new String[]{
                    ContactsContract.Contacts.DISPLAY_NAME, ContactsContract
                    .Contacts._ID};
            //виконання запиту
            Cursor c = getActivity().getContentResolver()
                    .query(contactUri, queryFields, null, null, null);

            try {
                //перевірка отриманого результату
                if (c.getCount() == 0) {
                    return;
                }
                //використання 1 стовбця даних (ім'я контакту)
                c.moveToFirst();
                String contact = c.getString(0);
                mZavdannya.setContact(contact);
                updateZamov();
                mContactButton.setText(contact);
                mCallID = c.getString(c.getColumnIndex(ContactsContract.
                        Contacts._ID));
            } finally {
                c.close();
            }

        } else if (requestCode == REQUEST_PHOTO) {
            updateZamov();
            updatePhotoView();
        }
    }

    private void updateZamov() {
        ZamovLab.get(getActivity()).updateZamov(mZavdannya);
        mCallbacks.onZamovUpdated(mZavdannya);
    }

    @Override
    public void onRequestPermissionsResult(int requestCode, String[] permissions,
                                           int[] grantResults) {
        if (requestCode == REQUEST_PERMISSION) {
            if (grantResults.length > 0 && grantResults[0] == PackageManager
                    .PERMISSION_GRANTED) {
                Intent pickContact = new Intent(Intent.ACTION_DIAL, ContactsContract
                        .Contacts.CONTENT_URI);
                startActivityForResult(pickContact, REQUEST_CONTACT);
            }
        }
    }

    private void updateDate() {
        //формат дати
        SimpleDateFormat dateFormat = new SimpleDateFormat("EEEE, dd MMM, yyyy");
        //оновити дату
        mDateButton.setText(dateFormat.format(mZavdannya.getDate()));
    }

    //4 строчки звіту та з'єднaння їх
    private String getZamovRepost() {
        //1 строчка
        String vikonanoString = null;
        if (mZavdannya.isVikonano()) {
            vikonanoString = getString(R.string.zamov_repost_vikonano);
        } else {
            vikonanoString = getString(R.string.zamov_repost_nevikonano);
        }
        //2 строчка
        String dataFormat = "EEE,dd MMM";
        String dataString = android.text.format.DateFormat.format(
                dataFormat, mZavdannya.getDate()).toString();
        //3 строчка
        String contact = mZavdannya.getContact();
        if (contact == null) {
            contact = getString(R.string.zamov_repost_no_contact);
        } else {
            contact = getString(R.string.zamov_repost_contact) + mZavdannya.getContact();
        }
        String price = mZavdannya.getPrice();

        String report = getString(R.string.zamov_repost, mZavdannya.
                getTitle(), dataString, vikonanoString, contact, price);
        return report;
    }

    //оновлення фото
    private void updatePhotoView() {
        if (mPhotoFile == null || !mPhotoFile.exists()) {
            mPhotoView.setImageDrawable(null);
        } else {
           /* Bitmap bitmap = PictureUtils.getScaledBitmap(
                    mPhotoFile.getPath(), getActivity());
            mPhotoView.setImageBitmap(bitmap);*/
            Bitmap bitmap = (mPhotoViewSize == null) ?
                    PictureUtils.getScaledBitmap(mPhotoFile.getPath(), getActivity()) :
                    PictureUtils.getScaledBitmap(mPhotoFile.getPath(),
                            mPhotoViewSize.x, mPhotoViewSize.y);
            mPhotoView.setImageBitmap(bitmap);
            mPhotoView.setEnabled(true);
        }
    }
}

1 个答案:

答案 0 :(得分:0)

您需要上下文才能从Fragment调用showDialog()。尝试拨打

getActivity().showDialog(DIALOG_EXIT);

更多信息,请访问here