当前位置: 首页 > 知识库问答 >
问题:

从DialogFragment[重复]获取值

诸葛皓
2023-03-14

我想让对话框片段(DialogFragment)向我返回一个值,该值是在退出时在编辑数量(editQuantity)中输入的。

但我没有办法让它发挥作用。我可以通过将值传递给intent来实现这一点,但这会破坏当前活动的进度。

除了传递意图之外,还有什么方法可以返回我的值吗?

package com.example.myprojectname;

import android.app.AlertDialog;
import android.app.Dialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.DialogInterface.OnClickListener;
import android.os.Bundle;
import android.support.v4.app.DialogFragment;
import android.text.InputType;
import android.util.Log;
import android.widget.EditText;

public class QuantityDialogFragment extends DialogFragment implements OnClickListener { 


    private EditText editQuantity;

    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {
        editQuantity = new EditText(getActivity());
        editQuantity.setInputType(InputType.TYPE_CLASS_NUMBER);

        return new AlertDialog.Builder(getActivity())
        .setTitle(R.string.app_name)
        .setMessage("Please Enter Quantity")
        .setPositiveButton("OK", this)
        .setNegativeButton("CANCEL", null)
        .setView(editQuantity)
        .create();

    }

    @Override
    public void onClick(DialogInterface dialog, int position) {
        String value = editQuantity.getText().toString();
        Log.d("Quantity: ", value);
        dialog.dismiss();       
    }
}

共有2个答案

丁善
2023-03-14

更进一步,我在对话框中创建了一个侦听器界面,并在主活动中实现了它。

public interface OnDialogResultListener {
    public abstract void onPositiveResult(String value);
    public abstract void onNegativeResult();
}

public void setOnDialogResultListener(OnDialogResultListener listener) {
    this.onDialogResultListener = listener;
}

在重写的onCancel(DialogInterface)和onPositiveResult(String)中调用onNegativeResult(),您希望对话框在其中返回值。

注意:在调用onPositiveResult()之后,不要忘记关闭对话框,否则对话框窗口将保持打开状态。

然后在主活动中,您可以为对话框创建一个侦听器,如下所示:

QuantityDialogFragment dialog = new QuantityDialogFragment();
dialog.setOnDialogResultListener(new QuantityDialogFragment.OnDialogResultListener() {
        @Override
        public void onPositiveResult(String value) {
            //Do something...
        }

        @Override
        public void onNegativeResult() {
            //Do something...
        }
    });

这将使您的对话框更易于以后重用。

公羊信厚
2023-03-14

假设要将结果转发给调用活动:)请尝试以下代码段:

public class QuantityDialogFragment extends DialogFragment implements OnClickListener {

    private EditText editQuantity;

    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {
        editQuantity = new EditText(getActivity());
        editQuantity.setInputType(InputType.TYPE_CLASS_NUMBER);

        return new AlertDialog.Builder(getActivity()).setTitle(R.string.app_name).setMessage("Please Enter Quantity")
                .setPositiveButton("OK", this).setNegativeButton("CANCEL", null).setView(editQuantity).create();

    }

    @Override
    public void onClick(DialogInterface dialog, int position) {
        String value = editQuantity.getText().toString();
        Log.d("Quantity: ", value);
        MainActivity callingActivity = (MainActivity) getActivity();
        callingActivity.onUserSelectValue(value);
        dialog.dismiss();
    }
}

在活动中添加:

public class MainActivity extends FragmentActivity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        QuantityDialogFragment dialog = new QuantityDialogFragment();
        dialog.show(getSupportFragmentManager(), "Dialog");
    }

    /**
     * callback method from QuantityDialogFragment, returning the value of user
     * input.
     * 
     * @param selectedValue
     */
    public void onUserSelectValue(String selectedValue) {
        // TODO add your implementation.
    }
}
 类似资料:
  • 我需要一些帮助我的对话问题。我从自定义视图创建了dialogFragment,并设置了肯定/否定按钮,如下所示: 我更喜欢那种样式的按钮,在这种情况下我该如何使用它。

  • 问题内容: 例如,假设我有一个可能包含以下值: 现在我想要检索的数量和,我想能够区分什么我有,要么还是因为在现实中,我可以在ArrayList中的任何对象,我必须能够区分它们。 我当时想做的是先将转换为,以保持顺序并删除重复项,这样我就可以了,但是我如何获取每个的数量并将其与适当的元素相关联? 总的来说,我想做的是能够编写一个方法让我输出: 但是不知道和是元素,因为它们可能是其他类似或的东西。 问

  • 生成的路径应该传递给片段,我通过本课中的活动使用接口来练习这一点 此解决方案工作良好,直到用户不改变设备的方向。 当设备在DialogFragment阶段或裁剪活动阶段旋转时,第一个活动和fragemnt被重新创建,并且DialogFragment的实例被销毁。所以我的回调没有运行,什么也没有发生。让我给你看代码: 设置单元活动 AddNewUnitFragment 对话框ImageSelect

  • 我有以下字符串:

  • 想象一下,我有FragmentA,我从它开始DialogFraank(框中有)。如何将中的值取回FragmentA?我尝试制作这样的东西,但我没有成功。

  • 我正在努力在Python中做一个实时货币转换器。我已经成功地将URL所需的所有数据提取到Python中。但是,我现在尝试在URL中调用特定字符串。这是我当前的代码: 如您所见,我已经打印了它获取的所有数据,但它现在正在从中打印特定的字符串。 我的问题是,如何从URL解析特定字符串?我听说过json.load,这是我应该使用的东西吗?