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