从 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.

的行为