簡體   English   中英

當按下后退按鈕時,在Java中調用AlertDialog.Builder for Android Fragment

[英]Calling AlertDialog.Builder in Java For Android Fragment When Back Button Is Pressed

我有一個簡單的應用程序(真的!),它顯示一個列表,然后根據用戶的選擇顯示列表中項目的詳細信息。 我是用Fragments做的。 細節部分是一個片段,里面有一個EditText 目前,如果用戶鍵入EditText並單擊“保存”按鈕, AlertDialog.Builder彈出AlertDialog.Builder ,詢問她是否要保存。 如果她選擇是,則將文本保存到數據庫。 如果用戶點擊后退按鈕,我希望發生同樣的事情。 在我的擴展FragmentActivity課程中,我有:

@Override
public boolean onKeyDown(int keyCode, KeyEvent event)
{

    super.onKeyDown(keyCode, event);

    DetailFrag frag = (DetailFrag) getSupportFragmentManager().findFragmentById(R.id.frag_stitchdetail);
    frag.onKeyDown(keyCode, event);
    return false;
}

在我的課程中擴展Fragment (細節部分),我有:

public boolean onKeyDown(int keyCode, KeyEvent event) {
    if (keyCode == KeyEvent.KEYCODE_ENTER && event.getRepeatCount() == 0
            && Edited) {
        return true;
    }
    else
        return false;
}

我不確定將調用AlertDialog.Builder的代碼放在AlertDialog.Builder 我想把它放在Fragment類中,因為代碼需要從列表中獲取詳細信息的rowID (擴展ListFragment的類)。 FragmentActivity類無法獲得該信息。 為了澄清,這是我用來操作Save按鈕的代碼。 它是從Fragment類的onCreateView方法調用的,我想重新使用這個代碼(可能在后面的按鈕被擊中時把它放在自己的方法中)。

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

    View view = inflater.inflate(R.layout.detailfragment, container, false);
    Typeface danielFont = Typeface.createFromAsset(getActivity().getAssets(),
            "danielbk.ttf");

    final EditText notes = (EditText)view.findViewById(R.id.stitchnotes);
    notes.setTypeface(danielFont);
    notes.setTextSize(12);

    builder = new AlertDialog.Builder(getActivity());
    builder.setMessage("Do you want to save your Notes?");
    builder.setCancelable(false);

    builder.setPositiveButton("Yes",
            new DialogInterface.OnClickListener() {

                @Override
                public void onClick(DialogInterface dialog, int which) {

                    String Notes = notes.getText().toString();
                    Uri updateUri = ContentUris.withAppendedId(STITCHES_URI, rowID);
                    ContentValues values = new ContentValues();
                    values.put("stitchnotes", Notes);
                    getActivity().getContentResolver().update(updateUri,values,null,null);
                }
            });

    builder.setNegativeButton("No",
            new DialogInterface.OnClickListener() {

                @Override
                public void onClick(DialogInterface dialog, int which) {
                    dialog.cancel();
                    //getActivity().finish();
                }
            });

    alert = builder.create();

    ImageButton savebutton = (ImageButton)view.findViewById(R.id.savebutton);
    savebutton.setOnClickListener(new ImageButton.OnClickListener() {

        public void onClick(View v) {
            alert.show();
        }
    });
    notes.addTextChangedListener(new TextWatcher() {

        @Override
        public void afterTextChanged(Editable s) {

        }

        @Override
        public void beforeTextChanged(CharSequence s, int start,
                int count, int after) {

        }

        @Override
        public void onTextChanged(CharSequence s, int start,
                int before, int count) {
            Edited = true;

        }
    });

    return view;
}

rowID ,當我宣布的二手updateURI來自ListFragment類,如下所示:

DetailFrag frag = (DetailFrag) getFragmentManager().findFragmentById(R.id.frag_stitchdetail);
if (frag != null && frag.isInLayout()) {
     //more code
     frag.setRowID(stitchid);
}

setRowID在Fragment類中定義:

public void setRowID(int row_id)
{
    rowID = row_id;
}

rowID是Fragment類中的私有靜態int。

有人可以指點我正確的方向嗎?

我可以看到兩個選項。

一:

public boolean onKeyDown(int keyCode, KeyEvent event)
{
    if(keyCode == KeyEvent.KEYCODE_BACK) {
        backPressed = true;
        alert.show();
        return true; // shows you consumed the event with your implementation
    }
    // blah, blah, other code
}

OnClickListeners添加到對話框是和否OnClickListeners

if (backPressed){
    finish();// - to exit the Activity
}

或者,創建兩個單獨的構建器,如下所示:

public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    // other code

    builder = new AlertDialog.Builder(getActivity());
    builder.setMessage("Do you want to save your Notes?");
    builder.setCancelable(false);

    builder.setPositiveButton("Yes",
            new DialogInterface.OnClickListener() {

                @Override
                public void onClick(DialogInterface dialog, int which) {
                    saveNotes();
                }
            });

    builder.setNegativeButton("No",
            new DialogInterface.OnClickListener() {

                @Override
                public void onClick(DialogInterface dialog, int which) {
                    dialog.cancel();
                }
            });

    alertSave = builder.create();


    builder.setPositiveButton("Yes",
            new DialogInterface.OnClickListener() {

                @Override
                public void onClick(DialogInterface dialog, int which) {
                    saveNotes();
                    finish();
                }
            });

    builder.setNegativeButton("No",
            new DialogInterface.OnClickListener() {

                @Override
                public void onClick(DialogInterface dialog, int which) {
                    dialog.cancel();
                    finish();
                }
            });

    alertBack = builder.create();

    ImageButton savebutton = (ImageButton)view.findViewById(R.id.savebutton);
    savebutton.setOnClickListener(new ImageButton.OnClickListener() {

        public void onClick(View v) {
            alertSave.show();
        }
    });
    // other code
}

public boolean onKeyDown(int keyCode, KeyEvent event)
{
    if(keyCode == KeyEvent.KEYCODE_BACK) {
        alertBack.show();
        return true; // shows you consumed the event with your implementation
    }
    // blah, blah, other code
}        


private void saveNotes() {
    String Notes = notes.getText().toString();
    Uri updateUri = ContentUris.withAppendedId(STITCHES_URI, rowID);
    ContentValues values = new ContentValues();
    values.put("stitchnotes", Notes);
    getActivity().getContentResolver().update(updateUri,values,null,null);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM