从 child activity 获得更多
Get extra from child activity
我得到主要 activity CrimeListActivity(带有片段 CrimeListFragment)调用 CrimePagerActivity。在清单中我写道:
<activity android:name=".CrimePagerActivity"
android:parentActivityName=".CrimeListActivity"
>
在 CrimePagerActivity 中,我将 "getParentActivityIntent" 重新定义为:
@Nullable
@Override
public Intent getParentActivityIntent() {
boolean mSubt=getIntent().getBooleanExtra(EXTRA_CRIME_SUBTITLE,true);
Intent intent=new Intent(this,CrimeListActivity.class);
intent.putExtra(CrimeListFragment.SAVED_SUBTITLE_VISIBLE,mSubt);
return intent;
}
现在我想 "catch" 列表 Activity 中的这个额外内容,但我在 fragment.This 的 OnResume 和 OnCreate 中都找不到这个额外内容问题是独一无二的,因为我不是谈论从 activity 开始的结果,我想要的是覆盖 parent 发送 parent 来自 child 的一些数据的意图。我在哪里可以找到它?
package software.eligo.com.criminalintent;
import android.support.v4.app.Fragment;
/**
* Created by Bermud06 on 12.07.2016.
*/
public class CrimeListActivity extends SingleFragmentActivity {
@Override
protected Fragment createFragment() {
return new CrimeListFragment();
}
}
package software.eligo.com.criminalintent;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentManager;
import android.support.v7.app.AppCompatActivity;
/**
* Created by Bermud06 on 12.07.2016.
*/
public abstract class SingleFragmentActivity extends AppCompatActivity{
protected abstract Fragment createFragment();
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_fragment);
FragmentManager fm=getSupportFragmentManager();
Fragment fragment=fm.findFragmentById(R.id.fragmentContainer);
if(fragment==null){
fragment=createFragment();
fm.beginTransaction()
.add(R.id.fragmentContainer,fragment)
.commit();
}
}
}
package software.eligo.com.criminalintent;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentStatePagerAdapter;
import android.support.v4.view.ViewPager;
import android.support.v7.app.AppCompatActivity;
import java.util.List;
import java.util.UUID;
/**
* Created by mragl on 31.07.2016.
*/
public class CrimePagerActivity extends AppCompatActivity {
private ViewPager mViewPager;
private List<Crime> mCrimes;
private static final String EXTRA_CRIME_ID="com.bignerdranch.android.criminalintent.crime_id";
private static final String EXTRA_CRIME_SUBTITLE="com.bignerdranch.android.criminalintent.visible_subtitle";
public static Intent newIntent(Context packageContext, UUID crimeID,boolean subt){
Intent intent=new Intent(packageContext,CrimePagerActivity.class);
intent.putExtra(EXTRA_CRIME_ID,crimeID);
intent.putExtra(EXTRA_CRIME_SUBTITLE,subt);
return intent;
}
@Nullable
@Override
public Intent getParentActivityIntent() {
boolean mSubt=getIntent().getBooleanExtra(EXTRA_CRIME_SUBTITLE,true);
Intent intent=new Intent(this,CrimeListActivity.class);
intent.putExtra(CrimeListFragment.SAVED_SUBTITLE_VISIBLE,mSubt);
return intent;
}
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_crime_pager);
UUID crimeID=(UUID)getIntent().getSerializableExtra(EXTRA_CRIME_ID);
mCrimes=CrimeLab.get(this).getCrimes();
mViewPager=(ViewPager)findViewById(R.id.activity_crime_pager_view_pager);
FragmentManager fragmentManager=getSupportFragmentManager();
mViewPager.setAdapter(new FragmentStatePagerAdapter(fragmentManager) {
@Override
public Fragment getItem(int position) {
Crime crime=mCrimes.get(position);
return CrimeFragment.newInstance(crime.getId());
}
@Override
public int getCount() {
return mCrimes.size();
}
});
for(int i=0;i<mCrimes.size();i++){
if(mCrimes.get(i).getId().equals(crimeID)){
mViewPager.setCurrentItem(i);
break;
}
}
}
}
此额外内容作为捆绑包传递给 CrimeListActivity.class。在 CrimeListActivity 中,在 onCreate 中执行此操作。
private boolean value;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Bundle bundle = getIntent().getExtras();
value = bundle.getBoolean(CrimeListFragment.SAVED_SUBTITLE_VISIBLE);
}
in CrimeListActivity there is a boolean mSubtitleShow which determines the visibility of subtitle. I want to make parent remember its last value and restore it when returning from child PagerActivity
要在 Activity 中保存数据,您应该覆盖 onSaveInstanceState()
. Then you restore the data in onRestoreInstanceState()
。您可以在 CrimeListActivity
中完成所有这些操作。 PagerActivity
不应涉及,因为此布尔值不会影响第二个 activity.
的行为
我得到主要 activity CrimeListActivity(带有片段 CrimeListFragment)调用 CrimePagerActivity。在清单中我写道:
<activity android:name=".CrimePagerActivity"
android:parentActivityName=".CrimeListActivity"
>
在 CrimePagerActivity 中,我将 "getParentActivityIntent" 重新定义为:
@Nullable
@Override
public Intent getParentActivityIntent() {
boolean mSubt=getIntent().getBooleanExtra(EXTRA_CRIME_SUBTITLE,true);
Intent intent=new Intent(this,CrimeListActivity.class);
intent.putExtra(CrimeListFragment.SAVED_SUBTITLE_VISIBLE,mSubt);
return intent;
}
现在我想 "catch" 列表 Activity 中的这个额外内容,但我在 fragment.This 的 OnResume 和 OnCreate 中都找不到这个额外内容问题是独一无二的,因为我不是谈论从 activity 开始的结果,我想要的是覆盖 parent 发送 parent 来自 child 的一些数据的意图。我在哪里可以找到它?
package software.eligo.com.criminalintent;
import android.support.v4.app.Fragment;
/**
* Created by Bermud06 on 12.07.2016.
*/
public class CrimeListActivity extends SingleFragmentActivity {
@Override
protected Fragment createFragment() {
return new CrimeListFragment();
}
}
package software.eligo.com.criminalintent;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentManager;
import android.support.v7.app.AppCompatActivity;
/**
* Created by Bermud06 on 12.07.2016.
*/
public abstract class SingleFragmentActivity extends AppCompatActivity{
protected abstract Fragment createFragment();
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_fragment);
FragmentManager fm=getSupportFragmentManager();
Fragment fragment=fm.findFragmentById(R.id.fragmentContainer);
if(fragment==null){
fragment=createFragment();
fm.beginTransaction()
.add(R.id.fragmentContainer,fragment)
.commit();
}
}
}
package software.eligo.com.criminalintent;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentStatePagerAdapter;
import android.support.v4.view.ViewPager;
import android.support.v7.app.AppCompatActivity;
import java.util.List;
import java.util.UUID;
/**
* Created by mragl on 31.07.2016.
*/
public class CrimePagerActivity extends AppCompatActivity {
private ViewPager mViewPager;
private List<Crime> mCrimes;
private static final String EXTRA_CRIME_ID="com.bignerdranch.android.criminalintent.crime_id";
private static final String EXTRA_CRIME_SUBTITLE="com.bignerdranch.android.criminalintent.visible_subtitle";
public static Intent newIntent(Context packageContext, UUID crimeID,boolean subt){
Intent intent=new Intent(packageContext,CrimePagerActivity.class);
intent.putExtra(EXTRA_CRIME_ID,crimeID);
intent.putExtra(EXTRA_CRIME_SUBTITLE,subt);
return intent;
}
@Nullable
@Override
public Intent getParentActivityIntent() {
boolean mSubt=getIntent().getBooleanExtra(EXTRA_CRIME_SUBTITLE,true);
Intent intent=new Intent(this,CrimeListActivity.class);
intent.putExtra(CrimeListFragment.SAVED_SUBTITLE_VISIBLE,mSubt);
return intent;
}
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_crime_pager);
UUID crimeID=(UUID)getIntent().getSerializableExtra(EXTRA_CRIME_ID);
mCrimes=CrimeLab.get(this).getCrimes();
mViewPager=(ViewPager)findViewById(R.id.activity_crime_pager_view_pager);
FragmentManager fragmentManager=getSupportFragmentManager();
mViewPager.setAdapter(new FragmentStatePagerAdapter(fragmentManager) {
@Override
public Fragment getItem(int position) {
Crime crime=mCrimes.get(position);
return CrimeFragment.newInstance(crime.getId());
}
@Override
public int getCount() {
return mCrimes.size();
}
});
for(int i=0;i<mCrimes.size();i++){
if(mCrimes.get(i).getId().equals(crimeID)){
mViewPager.setCurrentItem(i);
break;
}
}
}
}
此额外内容作为捆绑包传递给 CrimeListActivity.class。在 CrimeListActivity 中,在 onCreate 中执行此操作。
private boolean value;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Bundle bundle = getIntent().getExtras();
value = bundle.getBoolean(CrimeListFragment.SAVED_SUBTITLE_VISIBLE);
}
in CrimeListActivity there is a boolean mSubtitleShow which determines the visibility of subtitle. I want to make parent remember its last value and restore it when returning from child PagerActivity
要在 Activity 中保存数据,您应该覆盖 onSaveInstanceState()
. Then you restore the data in onRestoreInstanceState()
。您可以在 CrimeListActivity
中完成所有这些操作。 PagerActivity
不应涉及,因为此布尔值不会影响第二个 activity.