アクティビティAがあり、groupNameフィールドに従って3つのフラグメントが表示されます。私は別のアクティビティBをlauchesメニューボタンがあります。このボタンをクリックし、戻るボタンをクリックすると、groupNameはアクティビティAでnullです。私はsaveInstanceStateを使ってセーブとリストアを試みましたが、役に立たなかった。アクティビティAは決して破壊されないので、これが必要だとは思わない。子アクティビティの起動後にアクティビティのフィールドがnullに設定される
私は、Androidのマニフェストをチェックして、両方の活動が適切に登録されていると活動Aは、アクティビティBの親
public class GroupOverviewActivity extends AppCompatActivity implements MyTasksInteractionListener, OnGroupTasksFragmentInteractionListener {
private static final String TAG = "GroupOverviewActivity";
private String groupName;
@Override
protected void onCreate(final Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_group_overview);
if (savedInstanceState != null) {
groupName = savedInstanceState.getString("groupname");
} else if (getIntent() != null && getIntent().getExtras() != null) {
groupName = getIntent().getExtras().getString("groupname");
}
}
@Override
protected void onResume() {
super.onResume();
setSupportActionBar((Toolbar) findViewById(R.id.toolbar));
final ActionBar bar = getSupportActionBar();
if (bar != null) {
bar.setDisplayHomeAsUpEnabled(true);
bar.setTitle(groupName);
}
getSupportFragmentManager().beginTransaction()
.add(R.id.group_overview_fragment, GroupMyTasksFragment.newInstance(groupName), null)
.disallowAddToBackStack()
.commit();
final BottomNavigationView bottomNavigationView = findViewById(R.id.bottom_navigation);
bottomNavigationView.setOnNavigationItemSelectedListener(
new BottomNavigationView.OnNavigationItemSelectedListener() {
@Override
public boolean onNavigationItemSelected(@NonNull final MenuItem item) {
item.setChecked(true);
switch (item.getItemId()) {
case R.id.item_activity:
getSupportFragmentManager().beginTransaction()
.replace(R.id.group_overview_fragment, GroupActivityFragment.newInstance(groupName))
.disallowAddToBackStack()
.commit();
break;
case R.id.item_schedule:
getSupportFragmentManager().beginTransaction()
.replace(R.id.group_overview_fragment, GroupScheduleFragment.newInstance(groupName))
.disallowAddToBackStack()
.commit();
break;
case R.id.item_tasks:
getSupportFragmentManager().beginTransaction()
.replace(R.id.group_overview_fragment, GroupMyTasksFragment.newInstance(groupName))
.disallowAddToBackStack()
.commit();
break;
}
return false;
}
});
}
@Override
protected void onSaveInstanceState(final Bundle outState) {
outState.putString("groupname", groupName);
super.onSaveInstanceState(outState);
}
@Override
public boolean onCreateOptionsMenu(final Menu menu) {
getMenuInflater().inflate(R.menu.group_overview, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(final MenuItem item) {
if (item.getItemId() == R.id.item_members) {
final Intent intent = new Intent(this, GroupMembersActivity.class);
intent.putExtra(GroupMembersActivity.ARG_PARAM1, groupName);
startActivity(intent);
}
return true;
}
活動のレイアウトです:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/main_content"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="giphouse.nl.proprapp.ui.group.overview.GroupOverviewActivity">
<android.support.design.widget.AppBarLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:theme="@style/ProprTheme.AppBarOverlay"
android:id="@+id/appBarLayout">
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?attr/actionBarSize"
android:background="?attr/colorPrimary"
app:popupTheme="@style/ProprTheme.PopupOverlay" />
</android.support.design.widget.AppBarLayout>
<FrameLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_below="@+id/appBarLayout"
android:id="@+id/group_overview_fragment">
</FrameLayout>
<android.support.design.widget.BottomNavigationView
android:id="@+id/bottom_navigation"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:itemBackground="@color/colorPrimary"
app:itemIconTint="@drawable/nav_item_color_state"
app:itemTextColor="@drawable/nav_item_color_state"
android:layout_alignParentBottom="true"
app:menu="@menu/bottom_navigation_group_overview">
</android.support.design.widget.BottomNavigationView>
</RelativeLayout>
GroupOverviewActivityは方法開始日:
final Intent intent = new Intent(context, GroupOverviewActivity.class);
intent.putExtra("groupname", dto.getGroupName());
itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(final View v) {
context.startActivity(intent);
}
});
関連するログ。アクティビティBが起動し、目に見えるされた後
11-20 08:32:22.766 4906-4906/giphouse.nl.proprapp E/GroupOverviewActivity: Saving instance state DEVTEAM
11-20 08:32:22.038 4906-4906/giphouse.nl.proprapp E/GroupOverviewActivity: onPause DEVTEAM
:
11-20 08:32:22.769 4906-4906/giphouse.nl.proprapp E/GroupOverviewActivity: onStop DEVTEAM
11-20 08:32:27.122 4906-4906/giphouse.nl.proprapp E/GroupOverviewActivity: onDestroy DEVTEAM
後メニュー項目が活性Bを起動クリックすると
11-20 08:32:16.181 4906-4906/giphouse.nl.proprapp E/GroupOverviewActivity: onCreate DEVTEAM
11-20 08:32:16.185 4906-4906/giphouse.nl.proprapp E/GroupOverviewActivity: onStart DEVTEAM
11-20 08:32:16.222 4906-4906/giphouse.nl.proprapp E/GroupOverviewActivity: onResume DEVTEAM
:各ステートメントはgoupnameの値が付加されていますヒットボタン:
11-20 08:32:27.299 4906-4906/giphouse.nl.proprapp E/GroupOverviewActivity: onCreate null
11-20 08:32:27.300 4906-4906/giphouse.nl.proprapp E/GroupOverviewActivity: onStart null
11-20 08:32:27.315 4906-4906/giphouse.nl.proprapp E/GroupOverviewActivity: onResume null
onRestoreInstanceStateは呼び出されないことに注意してください。 onCreateで、savedInstanceStateはnullです。
は完全を期すために、関連AndroidManifestの関連部分:
<activity
android:name=".ui.group.overview.GroupOverviewActivity"
android:label="@string/title_activity_group_tabbed"
android:parentActivityName=".ui.group.GroupListActivity">
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value="giphouse.nl.proprapp.ui.group.GroupListActivity" />
</activity>
<activity android:name=".ui.group.GroupMembersActivity"
android:label="@string/item_title_members"
android:parentActivityName=".ui.group.overview.GroupOverviewActivity">
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value="giphouse.nl.proprapp.ui.group.overview.GroupOverviewActivity" />
</activity>
SOLUTION
(realharryから一種のポインタに従うことによって見出さ)溶液を、onOptionsItemSelectedを上書きmanualltすることであったデフォルト理由実装はapparantly新しい活動を作成します。 (私はそれをここに見つけたUp Button Calls OnDestroy of Parent Activity)。
onCreateView関数では、アクティビティの作成に使用されたインテントが検索されます。アクティビティが初めて開始されたとき、私はgroupnameが正しい値を持っていることがわかります。 – Hayeb
上記のようにあなたの例はそれを示していません。どの活動が行われているのでしょうか?関連するコードを投稿すると、何が起こっているのかがわかります。また、 'activity_group_overview'の投稿、またはグループ名が表示されている他のレイアウト。 – realharry
これがどのように行われたかを示すためにadditonal code snippetsを追加しました。 – Hayeb