0

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

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

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

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

谢谢

4

2 回答 2

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

}
于 2013-08-02T00:01:32.607 回答
0
  1. 如果您覆盖,请onResume()务必super.onResume()在执行自定义逻辑之前链接到。

  2. 当您开始第二个活动并想要返回结果时,请使用startActivityForResult(). 然后要获得结果,覆盖onActivityResult()。有关更多详细信息,请参阅开始活动和获取结果。另外 如何在Android上管理`startActivityForResult`?以及如何从 TabHost Activity 返回结果 (startActivityForResult)?是关于SO的相关问题。

  3. 正如其他人已经建议的那样,您可以使用 aDialog而不是 second 。Activity

于 2013-08-02T00:19:24.297 回答