Android 如何将数据从AskDialog返回活动
我有一个带有listview的activity1,单击列表中的一项后,它会显示自己的askDialog,带有2个选项按钮。我需要从我的activity1 with列表中获取我单击哪个打开另一个activity的信息。我该怎么做? 我的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
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;。