片段,如何从片段开始对话? [英] Fragments, how to start Dialog from fragment?

查看:110
本文介绍了片段,如何从片段开始对话?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我读 DialogFragment ,使一进一这样。

 进口android.app.AlertDialog;
进口android.app.Dialog;
进口android.content.DialogInterface;
进口android.os.Bundle;
进口android.support.v4.app.DialogFragment;公共类MyDialogFragment扩展DialogFragment {
公共静态的newInstance MyDialogFragment(INT标题){
    MyDialogFragment FRAG =新MyDialogFragment();
    捆绑ARGS =新包();
    args.putInt(题,题);
    frag.setArguments(参数);
    返回FRAG;
}
@覆盖
公共对话框onCreateDialog(捆绑savedInstanceState){
    。INT TITLE = getArguments()调用getInt(称号);    返回新AlertDialog.Builder(getActivity())
            .setIcon(R.drawable.plus_icon)
            .setTitle(职称)
            .setPositiveButton(OK,
                新DialogInterface.OnClickListener(){
                    公共无效的onClick(DialogInterface对话,诠释whichButton){
                        AddExerciseFragment.doPositiveClick();
                    }
                }
            )
            .setNegativeButton(否,
                新DialogInterface.OnClickListener(){
                    公共无效的onClick(DialogInterface对话,诠释whichButton){
                       AddExerciseFragment.doNegativeClick();
                    }
                }
            )
            。创建();
}}

而在另一个SherlockFragment我做下一个:

 公共无效doPositiveClick(){
}公共无效doNegativeClick(){
}
无效的ShowDialog(){
    DialogFragment newFragment = MyDialogFragment.newInstance(
            R.string.name);
    newFragment.show(getFragmentManager(),对话);
}

但方法doPositiveClick(),doNegativeClick()希望是静态的 - 这是对我不好。

 公共无效doPositiveClick(){
    DialogFlag = 0;
    意图photoPickerIntent =新意图(Intent.ACTION_PICK);
    photoPickerIntent.setType(图像/ *);
    startActivityForResult(photoPickerIntent,GALLERY_REQUEST);
    // dialog.cancel();}
@覆盖
公共无效的onActivityResult(INT申请code,INT结果code,
        意向imageReturnedIntent){
    super.onActivityResult(要求code,结果code,imageReturnedIntent);
    字符串路径= NULL;
    如果(DialogFlag == 0){
        开关(要求code){
        案例GALLERY_REQUEST:
            如果(结果code == RESULT_OK){
                乌里selectedImage = imageReturnedIntent.getData();
                PATH = getRealPathFromURI(selectedImage);
                Log.d(myLogs路径);
                如果(btnID == 1){
                    pathOne =路径;
                    位图bmImg = BitmapFactory.de codeFILE(pathOne);
                    ivOne.setImageBitmap(bmImg);
                    1 = bmImg;
                }其他{
                    pathTwo =路径;
                    位图bmImg = BitmapFactory.de codeFILE(pathTwo);
                    ivTwo.setImageBitmap(bmImg);
                    2 = bmImg;
                }            }
        }
    }
    如果(DialogFlag == 1){
        乌里URI;
        如果(要求code == CAMERA_RESULT){
            光标光标= getActivity()。getContentResolver()查询(
                    Media.EXTERNAL_CONTENT_URI,
                    新的String [] {Media.DATA,Media.DATE_ADDED,
                            MediaStore.Images.ImageColumns.ORIENTATION},
                    Media.DATE_ADDED,NULL,DATE_ADDED ASC);
            如果(光标=空&放大器;!&放大器; cursor.moveToFirst()){
                做{
                    URI = Uri.parse(cursor.getString(光标
                            .getColumnIndex(Media.DATA)));
                    PATH = uri.toString();
                }而(cursor.moveToNext());
                cursor.close();
            }
            Log.d(myLogs路径);
            如果(btnID == 1){
                pathOne =路径;
                位图bmImg = BitmapFactory.de codeFILE(pathOne);
                ivOne.setImageBitmap(bmImg);
                1 = bmImg;
            }其他{
                pathTwo =路径;
                位图bmImg = BitmapFactory.de codeFILE(pathTwo);
                ivTwo.setImageBitmap(bmImg);
                2 = bmImg;
            }        }
    }
}


解决方案

在您的片段类

下面声明

 公共静态最终诠释DIALOG_FRAGMENT = 1;
公共静态最终诠释RESULT_OK = 101;

然后

  DialogFragment newFragment = MyDialogFragment.newInstance(
        R.string.name);
   newFragment.setTargetFragment(SherLockFragmentName.this,DIALOG_FRAGMENT);
   newFragment.show(getFragmentManager(),对话);

然后在对话框片段

  .setPositiveButton(OK,
            新DialogInterface.OnClickListener(){
                公共无效的onClick(DialogInterface对话,诠释whichButton){
                    意向I = getActivity()getIntent()。
                    i.putExtra(钥匙,真正的);
                    getTargetFragment()的onActivityResult(getTargetRequest code()101,I)。
                }
            }
        )
        .setNegativeButton(否,
            新DialogInterface.OnClickListener(){
                公共无效的onClick(DialogInterface对话,诠释whichButton){
                   //AddExerciseFragment.doNegativeClick();
                    意向I = getActivity()getIntent()。
                    i.putExtra(钥匙,FALSE);                    getTargetFragment()的onActivityResult(getTargetRequest code()101,I)。
                }
            }
        )

然后重写 onActivityResul T的片段类

  @覆盖
公共无效的onActivityResult(INT申请code,INT结果code,意图数据){
        开关(要求code){
            案例DIALOG_FRAGMENT:                如果(结果code == RESULT_OK){
                    布尔检查= data.getBooleanExtra(钥匙,真正的);
                    如果(检查)
                    {
                        dopositiveClick();
                    }
                    其他
                    {
                        donegativeClick();
                    }
                }
                打破;
        }
    }

i read DialogFragment, and make one in one like this.

import android.app.AlertDialog;
import android.app.Dialog;
import android.content.DialogInterface;
import android.os.Bundle;
import android.support.v4.app.DialogFragment;

public class MyDialogFragment extends DialogFragment {
public static MyDialogFragment newInstance(int title) {
    MyDialogFragment frag = new MyDialogFragment();
    Bundle args = new Bundle();
    args.putInt("title", title);
    frag.setArguments(args);
    return frag;
}
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
    int title = getArguments().getInt("title");

    return new AlertDialog.Builder(getActivity())
            .setIcon(R.drawable.plus_icon)
            .setTitle(title)
            .setPositiveButton("OK",
                new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int whichButton) {
                        AddExerciseFragment.doPositiveClick();
                    }
                }
            )
            .setNegativeButton("NO",
                new DialogInterface.OnClickListener() {
                    public void onClick(DialogInterface dialog, int whichButton) {
                       AddExerciseFragment.doNegativeClick();
                    }
                }
            )
            .create();
}

}

and in another SherlockFragment i make next:

public void doPositiveClick() {


}

public  void doNegativeClick() {


}
void showDialog() {
    DialogFragment newFragment = MyDialogFragment.newInstance(
            R.string.name);
    newFragment.show(getFragmentManager(), "dialog");
}

But methods doPositiveClick(),doNegativeClick() wants to be static - it is bad for me.

public void doPositiveClick() {
    DialogFlag = 0;
    Intent photoPickerIntent = new Intent(Intent.ACTION_PICK);
    photoPickerIntent.setType("image/*");
    startActivityForResult(photoPickerIntent, GALLERY_REQUEST);
    // dialog.cancel();

}


@Override
public void onActivityResult(int requestCode, int resultCode,
        Intent imageReturnedIntent) {
    super.onActivityResult(requestCode, resultCode, imageReturnedIntent);
    String path = null;
    if (DialogFlag == 0) {


        switch (requestCode) {
        case GALLERY_REQUEST:
            if (resultCode == RESULT_OK) {
                Uri selectedImage = imageReturnedIntent.getData();
                path = getRealPathFromURI(selectedImage);
                Log.d("myLogs", path);
                if (btnID == 1) {
                    pathOne = path;
                    Bitmap bmImg = BitmapFactory.decodeFile(pathOne);
                    ivOne.setImageBitmap(bmImg);
                    one = bmImg;
                } else {
                    pathTwo = path;
                    Bitmap bmImg = BitmapFactory.decodeFile(pathTwo);
                    ivTwo.setImageBitmap(bmImg);
                    two = bmImg;
                }

            }
        }
    }
    if (DialogFlag == 1) {
        Uri uri;
        if (requestCode == CAMERA_RESULT) {
            Cursor cursor = getActivity().getContentResolver().query(
                    Media.EXTERNAL_CONTENT_URI,
                    new String[] { Media.DATA, Media.DATE_ADDED,
                            MediaStore.Images.ImageColumns.ORIENTATION },
                    Media.DATE_ADDED, null, "date_added ASC");
            if (cursor != null && cursor.moveToFirst()) {
                do {
                    uri = Uri.parse(cursor.getString(cursor
                            .getColumnIndex(Media.DATA)));
                    path = uri.toString();
                } while (cursor.moveToNext());
                cursor.close();
            }
            Log.d("myLogs", path);
            if (btnID == 1) {
                pathOne = path;
                Bitmap bmImg = BitmapFactory.decodeFile(pathOne);
                ivOne.setImageBitmap(bmImg);
                one = bmImg;
            } else {
                pathTwo = path;
                Bitmap bmImg = BitmapFactory.decodeFile(pathTwo);
                ivTwo.setImageBitmap(bmImg);
                two = bmImg;
            }

        }
    }
}

解决方案

In your Fragment class

Declare the below

public static final int DIALOG_FRAGMENT = 1;
public static final int RESULT_OK = 101;

Then

   DialogFragment newFragment = MyDialogFragment.newInstance(
        R.string.name);
   newFragment.setTargetFragment(SherLockFragmentName.this, DIALOG_FRAGMENT); 
   newFragment.show(getFragmentManager(), "dialog");

Then in Dialog Fragment

    .setPositiveButton("OK",
            new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int whichButton) {
                    Intent i =getActivity().getIntent();
                    i.putExtra("key", true);
                    getTargetFragment().onActivityResult(getTargetRequestCode(), 101, i);
                }
            }
        )
        .setNegativeButton("NO",
            new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int whichButton) {
                   //AddExerciseFragment.doNegativeClick();
                    Intent i =getActivity().getIntent();
                    i.putExtra("key", false);

                    getTargetFragment().onActivityResult(getTargetRequestCode(), 101, i);
                }
            }
        )

Then override onActivityResult in Fragment class

    @Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
        switch(requestCode) {
            case DIALOG_FRAGMENT:

                if (resultCode == RESULT_OK) {
                    boolean check = data.getBooleanExtra("key", true);
                    if(check)
                    {
                        dopositiveClick();
                    }
                    else
                    {
                        donegativeClick();
                    }
                } 
                break;
        }
    }

这篇关于片段,如何从片段开始对话?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆