我的活动包含一系列显示数据的元素(日期,时间,数量,描述)。当我选择其中一个元素时,将启动一个新活动,并且所选元素中的先前数据将填充新活动的字段。如果字段为空,则可以输入新数据。
选择完成按钮将返回主活动,并使用弹出窗口中输入的新数据填充相关元素。
我的问题是,当返回主活动时,我当前使用public void onResume()后跟代码用数据填充元素,但这是正确的方法,当我返回主活动时,来自其他元素的所有其他数据都消失了。这不好。
每个元素(Mon1,Mon2,Mon3,Tues1,Tues2等)的每个数据字段(EditText)都有唯一的ID,如果这有助于(或阻碍)。
由于
答案 0 :(得分:0)
你在谈论对话吗?您无需为此创建新的活动。创建一个自定义对话框,并使用onDialogPositiveClick()监听器传回参数。
首先,您的MainActivity应该实现TablesDialogFragment.NoticeDialogListener。
然后,在对话框类中:
public class TablesDialogFragment extends DialogFragment implements OnLongClickListener {
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
final ArrayList<String> mSelectedItems = new ArrayList<String>();
String title = getArguments().getString("title");
final String[] tables = getArguments().getStringArray("key");
ContextThemeWrapper ctw = new ContextThemeWrapper( getActivity(), R.style.AlertDialogCustom);
AlertDialog.Builder builder = new AlertDialog.Builder(ctw);
if(tables.length !=0){
builder.setTitle(title)
.setMultiChoiceItems(tables, null,
new DialogInterface.OnMultiChoiceClickListener() {
@Override
public void onClick(DialogInterface dialog, int which,
boolean isChecked) {
if (isChecked) {
// If the user checked the item, add it to the selected items
mSelectedItems.add(tables[which]);
} else if (!isChecked) {
// Else, if the item is already in the array, remove it
mSelectedItems.remove(tables[which]);
}
}
})
.setPositiveButton("Ok", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int id) {
// User clicked OK, so save the mSelectedItems results somewhere
// or return them to the component that opened the dialog
String[] selected = mSelectedItems.toArray(new String[mSelectedItems.size()]);
//Here I pass the String[] to the MainActivity
mListener.onDialogPositiveClick(TablesDialogFragment.this, selected);
}
})
.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int id) {
//Collapse SearchView
MainActivity.getSearchMenuItem().collapseActionView();
}
});
} else{
builder.setTitle("Sorry to tell you this, but... :(");
builder.setMessage("Why don't you try something different?")
.setPositiveButton("Ok", new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int id) {
//Collapse SearchView
MainActivity.getSearchMenuItem().collapseActionView();
}
});
}
return builder.create();
}
然后,在您的MainActivity中。
private String[] selectedItems;
public void callDialog(){
TablesDialogFragment newFragment = new TablesDialogFragment();
Bundle args = new Bundle();
String[] array = {"hey", "you"};
args.putString("title", "Title of The Dialog");
args.putStringArray("key", array);
newFragment.setArguments(args);
newFragment.show(getSupportFragmentManager(), "Table");
}
@Override
public void onDialogPositiveClick(DialogFragment dialog, String[] selected) {
// TODO Auto-generated method stub
selectedItems = selected;
//Do Whatever you want with the arguments in your MainActivity
}
答案 1 :(得分:0)
如果您覆盖onResume()
,请务必在执行自定义逻辑之前链接到super.onResume()
。
当您开始第二项活动并希望获得结果时,请使用startActivityForResult()
。然后,要获得结果,请覆盖onActivityResult()。有关详细信息,请参阅Starting Activities and Getting Results。此处How to manage `startActivityForResult` on Android?和How to return a result (startActivityForResult) from a TabHost Activity?也是SO上的相关问题。
您可以使用Dialog
而不是其他人已经建议的Activity
。