2016-08-15 91 views
0

我得到了主要活动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; 
} 

现在我要“抓”这个额外的名单活动,但我上无法找到这个额外既没有OnResume也没有OnCreate的片段。这个问题是独特的因为我不是说开始活动的结果,我想要的是重写父项意图从父项发送一些数据。我在哪里可以找到它?

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; 
       } 
     } 

    } 



} 
+0

能否分享您的CrimeListActivity.class的代码 –

+0

package software.eligo.com.criminalintent; import android.support.v4.app.Fragment; /** *由Bermud06于12.07.2016创建。 ();}};}};}}}//公共类CrimeListActivity扩展SingleFragmentActivity { @Override protected Fragment createFragment(){ return new CrimeListFragment(); } } –

+0

请编辑您的原始问题,以便您可以格式化代码。 –

回答

1

这个额外的东西被作为一个包传递给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); 

} 
+0

你想让我重新定义抽象类的方法吗?因为抽象类方法评估器没有告诉我你在说什么...... –

+0

它工作的兄弟!) 我用你的解决方案(使得“value”public可以从fragment中访问),然后 @Override public void onCreate(Bundle savedInstanceState){Bundle bundle = getIntent()。getExtras(); if(bundle!= null){value = bundle.getBoolean(CrimeListFragment.SAVED_SUBTITLE_VISIBLE,false); if(savedInstanceState == null) savedInstanceState = new Bundle(); savedInstanceState.putBoolean(CrimeListFragment。SAVED_SUBTITLE_VISIBLE,值); } super.onCreate(savedInstanceState); } –

+0

然后在我写的片段中 @Override public void onCreate(@Nullable Bundle savedInstanceState){ super.onCreate(savedInstanceState); setHasOptionsMenu(true); mSubtitleVisible =((CrimeListActivity)getActivity()).value; } –

0

在CrimeListActivity有一个布尔mSubtitleShow其确定字幕的可见性。我要让父母记住其最后的值,并恢复它从孩子PagerActivity

返回要在活动数据保存时,你应该在此改变onSaveInstanceState()。然后你恢复onRestoreInstanceState()中的数据。您可以在CrimeListActivity中完成所有这一切。不应该涉及PagerActivity,因为此布尔值不会影响第二个活动的行为。

+0

不想开始活动的结果...我想重写父母的意图,这是不对的解决方案我认为 –

+0

@IlqarRasulov为什么你想重写父母的意图?这不会做你想做的事情。 –