片段,如何从片段开始对话? [英] Fragments, how to start Dialog from fragment?
本文介绍了片段,如何从片段开始对话?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我读 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 onActivityResul
t 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屋!
查看全文