如何使被解雇的对话框消失

时间:2015-11-24 11:47:00

标签: android android-fragments dismiss

我尝试使用自定义对话框片段来获取用户的一些输入,并且我遇到了这个问题。即使我在对话框类中使用getDialog.dismiss()this.dismiss(),或者在我使用fragmentTransaction.remove(fragment)检索后使用getFragmentByTag尝试将其删除,对话框也不会消失。实际上,我注意到在解雇后无法再访问该对话框,但仍然没有消失。

当我第一次单击OK以关闭时,OnClickListener在片段类中被调用并且getDialog().dismiss();被执行但我仍然可以看到对话框。当我第二次点击它时,我得到一个错误,说我试图访问空引用,所以我理解对象被破坏但片段仍然可见。

这是错误

java.lang.NullPointerException: Attempt to invoke virtual method 'void android.app.Dialog.dismiss()' on a null object reference
            at tg.androidgeek.ezna.Produits.AddProduitDialog$1.onClick(AddProduitDialog.java:75)
            at android.view.View.performClick(View.java:4764)
            at android.view.View$PerformClick.run(View.java:19844)
            at android.os.Handler.handleCallback(Handler.java:739)
            at android.os.Handler.dispatchMessage(Handler.java:95)
            at android.os.Looper.loop(Looper.java:135)
            at android.app.ActivityThread.main(ActivityThread.java:5356)
            at java.lang.reflect.Method.invoke(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:372)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:908)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:703)

这是片段类:

    public class AddProduitDialog extends DialogFragment implements TextView.OnEditorActionListener/*, View.OnClickListener */{
    private static final String TAG = "AddProduitDialog";
    Button BtOkProduit;
    Button BtKoProduit;
    Spinner spinner;
    ArrayList<Categorie> Categories;
    private EditText mEditText;
    private EditText mEditTextPrix;

    public AddProduitDialog() {
        // Empty constructor required for DialogFragment
    }


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


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

        //Getting All Categories from DataBase
        CategorieManager cm = new CategorieManager(getContext());
        cm.open();
        Categories = cm.getAllCategorieObjects();
        cm.close();

        spinner = (Spinner) view.findViewById(R.id.spinner_add_categorie);
        SpinAdapter spinAdapter = new SpinAdapter(getContext(), R.layout.item_row_spinner, Categories);
        spinner.setAdapter(spinAdapter);

        mEditText = (EditText) view.findViewById(R.id.editText);
        mEditTextPrix = (EditText) view.findViewById(R.id.edit_text_prix);
        getDialog().setTitle("Ajoutez Un Produit");

        // Show soft keyboard automatically
        mEditText.requestFocus();
        getDialog().getWindow().setSoftInputMode(
                WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE);
        mEditText.setOnEditorActionListener(this);
        BtOkProduit = (Button) (view.findViewById(R.id.btnOkProduit));
        BtKoProduit = (Button) (view.findViewById(R.id.btnKoProduit));

        BtKoProduit.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Log.d(TAG, "onClick btnKo");
                getDialog().dismiss();
               // if (AddProduitDialog.this!=null)AddProduitDialog.this.dismiss();
//Any other way I've tried fails 
            }
        });
       /* BtOkProduit.setOnClickListener(this);*/
        getDialog().cancel();
        return view;
    }


    @Override
    public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
        if (EditorInfo.IME_ACTION_DONE == actionId) {
            // Return input text to activity
            EditProduitDialogListener activity = (EditProduitDialogListener) getActivity();
            Produit produit = new Produit(0,
                    mEditText.getText().toString(),
                    Categories.get(spinner.getSelectedItemPosition()).getId()
                    , Double.parseDouble(mEditTextPrix.getText().toString())
                    , R.mipmap.ic_folder);

            activity.onFinishEditProduit(produit);
            this.dismiss();
            return true;
        }
        return false;
    }



    public interface EditProduitDialogListener {
        void onFinishEditProduit(Produit Value);
    }

    public class SpinAdapter extends ArrayAdapter<Categorie> {
        ArrayList<Categorie> Values;
        Context context;

        public SpinAdapter(Context context, int RessoucreId, ArrayList<Categorie> Values) {
            super(context, RessoucreId, Values);
            this.Values = Values;
            this.context = context;
        }


        @Override
        public View getView(int position, View convertView, ViewGroup parent) {

            //  if (convertView == null) {
            TextView tv = (TextView) getLayoutInflater(null).inflate(R.layout.item_row_spinner, null);
            tv.setText(Values.get(position).getNom());
            return tv;
            // }
           /* TextView tv = (TextView) (convertView);
            tv.setText(Values.get(position).getNom());
            return tv;*/
        }

        @Override
        public View getDropDownView(int position, View convertView, ViewGroup parent) {

            if (convertView == null) {
                TextView tv = (TextView) getLayoutInflater(null).inflate(R.layout.item_row_spinner, null);
                tv.setText(Values.get(position).getNom());
                return tv;
            }
            TextView tv = (TextView) (convertView);
            tv.setText(Values.get(position).getNom());
            return tv;
        }
    }
}

这是对话框的布局

    <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="300dp"
    android:orientation="vertical"
    android:padding="16dp">

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

        <TextView
            android:id="@+id/textView"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="@string/nom_du_produit"
            android:textAppearance="?android:attr/textAppearanceMedium" />

        <EditText
            android:id="@+id/editText"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginRight="16dp"
            android:layout_weight="1"
            android:inputType="textShortMessage"
            android:lines="1"
            android:minWidth="100dp"
            android:textAppearance="?android:attr/textAppearanceMedium" />

    </LinearLayout>

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

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"

            android:text="@string/categorie"
            android:textAppearance="?android:attr/textAppearanceMedium" />

        <Spinner
            android:id="@+id/spinner_add_categorie"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1" />
    </LinearLayout>

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

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"

            android:text="@string/prix"
            android:textAppearance="?android:attr/textAppearanceMedium" />

        <EditText
            android:id="@+id/edit_text_prix"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:inputType="numberDecimal"
            android:lines="1"
            android:linksClickable="false" />
    </LinearLayout>

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

        <Button
            android:id="@+id/btnOkProduit"
            style="@style/Base.Widget.AppCompat.Button.Borderless"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="@string/ok" />

        <Button
            android:id="@+id/btnKoProduit"
            style="@style/Base.Widget.AppCompat.Button.Borderless"
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:layout_weight="1"
            android:text="@string/cancel" />
    </LinearLayout>


</LinearLayout>

我真的希望有人可以帮忙解决这个问题,谢谢。

0 个答案:

没有答案