Android 未调用onActivityResult

Android 未调用onActivityResult,android,android-fragments,android-intent,onactivityresult,Android,Android Fragments,Android Intent,Onactivityresult,在阅读了多个web页面之后,我尝试了很多方法,但是,我不能在两个活动和一个片段之间对一个对象进行往返 概述:对象是一个可序列化的对象,描述一顿饭(你吃的东西)。我有一个main活动,使用一个带有ListView列表对象的片段。当我在列表视图中单击一顿饭时amealeditor活动将使用startActivityForResult方法启动。这一切都很好。我可以在此活动中编辑用餐对象 问题:当我在MealEditorActivity菜单栏中单击“后退”时,我想将已编辑的用餐对象发回,但片段中或mai

在阅读了多个web页面之后,我尝试了很多方法,但是,我不能在两个活动和一个片段之间对一个对象进行往返

概述:对象是一个可序列化的对象,描述一顿饭(你吃的东西)。我有一个
main活动
,使用一个带有
ListView
列表对象的片段。当我在
列表视图中单击一顿饭时
a
mealeditor活动
将使用startActivityForResult方法启动。这一切都很好。我可以在此活动中编辑用餐对象

问题:当我在
MealEditorActivity
菜单栏中单击“后退”时,我想将已编辑的用餐对象发回,但片段中或
main活动中的onActivityResult均未调用

我做错了什么

代码片段:

... 
public class MainActivity extends AppCompatActivity {
    private static final String LOG_TAG = MainActivity.class.getSimpleName();
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        // add a button below the listview to create new Meal entries
        Button newButton = (Button) findViewById(R.id.new_meal_button);
        newButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
               ...
            }
        });
    } 
   ...

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        Log.d(LOG_TAG, "onActivityResult in MainActivity triggered");
        super.onActivityResult(requestCode, resultCode, data);
    }
}
这就是当点击一顿饭时,
mealeditor活动
是如何从片段开始的

...
public class MainFragmentMealList extends Fragment {

private static final String LOG_TAG = MainFragmentMealList.class.getSimpleName();

protected List<Meal> mealList;

protected final int REQUEST_CODE = 1;

public MainFragmentMealList() {}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {

    mealList = new ArrayList<Meal>();

    // if no data exists in database, the generate some test data
    if(mealList.size() == 0) {
        Meal meal = new Meal();
        meal.setId(mealList.size()+1);
        meal.test();
        mealList.add(meal);
        meal = new Meal();
        meal.setId(mealList.size()+1);
        meal.test2();
        mealList.add(meal);
    }

    ArrayAdapter<Meal> mealListeAdapter =
            new ArrayAdapter<>(
                    getActivity(), // Die aktuelle Umgebung (diese Activity)
                    R.layout.meal_list_item, // ID der XML-Layout Datei
                    R.id.meal_list_item_textview, // ID des TextViews
                    mealList); // Beispieldaten in einer ArrayList

    View rootView = inflater.inflate(R.layout.fragment_meallist_main, container, false);

    ListView mealListView = (ListView) rootView.findViewById(R.id.listview_mealliste);
    mealListView.setAdapter(mealListeAdapter);

    mealListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
        @Override
        public void onItemClick(AdapterView<?> adapterView, View view, int position, long id) {
            Meal selMeal = (Meal) adapterView.getItemAtPosition(position);
            Intent intent = new Intent(getActivity(), MealEditorActivity.class);
            Bundle bundle = new Bundle();
            bundle.putSerializable(MealEditorActivity.EDIT_MEAL_TAG, selMeal);
            intent.putExtras(bundle);
            startActivityForResult(intent, REQUEST_CODE);
        }
    });

    return rootView;
}

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {

        Log.d(LOG_TAG, "onActivityResult triggered: " + requestCode);

        if (resultCode == Activity.RESULT_OK) {
            Meal meal = (Meal) data.getExtras().getSerializable(MealEditorActivity.REPLY_MEAL_TAG);
            Log.d(LOG_TAG, "Date@onActivityResult : " + meal.getDate());            
    }

    super.onActivityResult(requestCode, resultCode, data);
}
...   
以下是AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.levin.symptomdiary">

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity android:name=".MealEditorActivity"
            android:label="@string/action_editor_name"
            android:parentActivityName=".MainActivity" >
            <meta-data
                android:name="android.support.PARENT_ACTIVITY"
                android:value="com.levin.symptomdiary.MainActivity" />
        </activity>
    </application>

</manifest>

我使用了一个新安装的
androidstudio
和一个移动
Emulator
android4.4
目标


这是我第一次开发Android,因此,非常感谢您的帮助。提前非常感谢

您还可以包含
manifest.xml
文件吗?您可以将用餐项目保存到应用程序本地数据库中。当您通过单击餐饮项目转到下一个活动时,只需将餐饮项目id(如果有)或位置传递给它即可。在下一个活动中,检索所有膳食项目,并通过运行for循环来尝试查找您的项目。一旦您能够找到并更新项目,只需将用餐项目(全部)更新到DB中,当您按下当前活动上的后退按钮时,第一个活动的onResume()将运行,在该函数中,您可以检索膳食项目并刷新列表项目。因此,您可以看到列表中的更改是否确实调用了onBackPressed或onBackPressed?我添加了AndroidManifest.xmlabove@howdoidothis:onBackPressed从不调用。但是,当我单击菜单中的后退箭头时,会调用OnOptions ItemSelected。您是否还可以包括
manifest.xml
文件?您可以将用餐项目保存到应用程序本地数据库中。当您通过单击餐饮项目转到下一个活动时,只需将餐饮项目id(如果有)或位置传递给它即可。在下一个活动中,检索所有膳食项目,并通过运行for循环来尝试查找您的项目。一旦您能够找到并更新项目,只需将用餐项目(全部)更新到DB中,当您按下当前活动上的后退按钮时,第一个活动的onResume()将运行,在该函数中,您可以检索膳食项目并刷新列表项目。因此,您可以看到列表中的更改是否确实调用了onBackPressed或onBackPressed?我添加了AndroidManifest.xmlabove@howdoidothis:onBackPressed从不调用。但是,当我单击菜单中的后退箭头时,将调用OnOptions ItemSelected。
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.levin.symptomdiary">

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity android:name=".MealEditorActivity"
            android:label="@string/action_editor_name"
            android:parentActivityName=".MainActivity" >
            <meta-data
                android:name="android.support.PARENT_ACTIVITY"
                android:value="com.levin.symptomdiary.MainActivity" />
        </activity>
    </application>

</manifest>