从一个活动返回到另一个活动

时间:2013-08-01 23:33:06

标签: android

我的活动包含一系列显示数据的元素(日期,时间,数量,描述)。当我选择其中一个元素时,将启动一个新活动,并且所选元素中的先前数据将填充新活动的字段。如果字段为空,则可以输入新数据。

选择完成按钮将返回主活动,并使用弹出窗口中输入的新数据填充相关元素。

我的问题是,当返回主活动时,我当前使用public void onResume()后跟代码用数据填充元素,但这是正确的方法,当我返回主活动时,来自其他元素的所有其他数据都消失了。这不好。

每个元素(Mon1,Mon2,Mon3,Tues1,Tues2等)的每个数据字段(EditText)都有唯一的ID,如果这有助于(或阻碍)。

由于

2 个答案:

答案 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)

  1. 如果您覆盖onResume(),请务必在执行自定义逻辑之前链接到super.onResume()

  2. 当您开始第二项活动并希望获得结果时,请使用startActivityForResult()。然后,要获得结果,请覆盖onActivityResult()。有关详细信息,请参阅Starting Activities and Getting Results。此处How to manage `startActivityForResult` on Android?How to return a result (startActivityForResult) from a TabHost Activity?也是SO上的相关问题。

  3. 您可以使用Dialog而不是其他人已经建议的Activity