Android 如何将数据从AskDialog返回活动

Android 如何将数据从AskDialog返回活动,android,dialog,Android,Dialog,我有一个带有listview的activity1,单击列表中的一项后,它会显示自己的askDialog,带有2个选项按钮。我需要从我的activity1 with列表中获取我单击哪个打开另一个activity的信息。我该怎么做? 我的AskDialog: public class AskDialog extends Dialog implements android.view.View.OnClickListener { public Activity c; private Butt

我有一个带有listview的activity1,单击列表中的一项后,它会显示自己的askDialog,带有2个选项按钮。我需要从我的activity1 with列表中获取我单击哪个打开另一个activity的信息。我该怎么做? 我的AskDialog:

public class AskDialog extends Dialog implements
    android.view.View.OnClickListener {

public Activity c;

private Button edit;
private Button delete;
private int position;
private boolean tariff;

public AskDialog(Activity a,int position,boolean tariff) {
    super(a);
    // TODO Auto-generated constructor stub
    this.c = a;
    this.position = position;
    this.tariff = tariff;
}

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    requestWindowFeature(Window.FEATURE_NO_TITLE);
    setContentView(R.layout.ask_dialog);
    edit = (Button) findViewById(R.id.editBtn);
    if(tariff){
        edit.setText("Zobrazit záznam");
    }
    delete = (Button) findViewById(R.id.deleteBtn);
    edit.setOnClickListener(this);
    delete.setOnClickListener(this);

}

@Override
public void onClick(View v) {
    switch (v.getId()) {
        case R.id.editBtn:

            break;
        case R.id.deleteBtn:
dismiss();
            break;
        default:
            break;
        }
        dismiss();
    }
}
这就是我称之为对话框的地方:

listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
                @Override
                public void onItemClick(AdapterView<?> parent, View view, int position,
                                        long id) {
                    positionOfTAriff = position;
AskDialog askDialog = new AskDialog(MyCommonListActivity.this,position,false);
askDialog.show();

或者我应该使用其他对话框吗?

您可以使用共享首选项:

SharedPreferences prefs = this.getSharedPreferences(
  "com.example.app", Context.MODE_PRIVATE);
String dateTimeKey = "com.example.app.datetime";

// use a default value using new Date()
long l = prefs.getLong(dateTimeKey, new Date().getTime()); 
要阅读首选项,请执行以下操作:

SharedPreferences prefs = this.getSharedPreferences(
  "com.example.app", Context.MODE_PRIVATE);
String dateTimeKey = "com.example.app.datetime";

// use a default value using new Date()
long l = prefs.getLong(dateTimeKey, new Date().getTime()); 
编辑和保存首选项的步骤

Date dt = getSomeDate();
prefs.edit().putLong(dateTimeKey, dt.getTime()).apply();

您可以在AsdkDialog中提交首选项,并读取活动或片段。

有两种方法

创建接口,使用创建的接口实现活动/片段,将其引用传递给对话框并在对话框中初始化,而不是在onDestroy中使用保存在对话框中的引用调用接口方法 在调用dialog.show之前,将对话框更新为DialogFragment;调用dialog.setTargetFragmentTargetFragment,请求代码;并在片段和活动中实现onActivityResult,在销毁对话框之前调用getTargetFragment.onActivityResultRequestCode,Activity.RESULT_OK,intent;
将回调参数添加到对话框的构造函数中

Callback myCallback;
public AskDialog(Activity a, int position, Callback myCallback, boolean tariff) {
super(a);
this.c = a;
this.position = position;  
this.tariff = tariff;
this.myCallback = myCallback;
}
更改onClick:

public void onClick(View v) {
switch (v.getId()) {
    case R.id.editBtn:
        {
            Bundle bundle = new Bundle();
            bundle.putString("choice", "edit");
            bundle.putInt("position", position);

            Message msg = new Message();
            msg.setData(bundle);
            myCallback.handleMessage(msg);

            dismiss();
       }
    break;
    case R.id.deleteBtn:
       {
            Bundle bundle = new Bundle();
            bundle.putString("choice", "delete");
            bundle.putInt("position", position);

            Message msg = new Message();
            msg.setData(bundle);
            myCallback.handleMessage(msg);

            dismiss();
       }
        break;
    default:
        break;
    }  
}
在调用对话框的地方,您可以创建回调处理程序:

 Callback theCallback = new Callback() {
    // @Override
    public boolean handleMessage(Message msg) {
        // super.handleMessage(msg);
        Bundle bundle = msg.getData();
        String choice = bundle.getString("choice");
        int position = bundle.getInt("position");
        Toast.makeText(MainActivity.this, choice + "\nposition: " + position, Toast.LENGTH_SHORT) .show();
        return true;
    }
};
您可以使用以下命令调用该对话框:

 new AskDialog( MainActivity.this, position, theCallback, false).show();

无法在下一个活动中启动AskDialog?您可以为其构造函数提供必要的参数。否则,实现一个回调参数。您好,您正在尝试此解决方案吗?我应该导入什么才能使用此回调?当您将鼠标放在该单词上方时,您的IDE建议不是有些导入吗?导入android.os.Handler.Callback;。