2016-08-15 49 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爲什麼你想重寫父母的意圖?這不會做你想做的事情。 –