2016-08-15 2 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; импорт android.support.v4.app.Fragment; /** * Создано Bermud06 12.07.2016. */* Открытый класс CrimeListActivity extends 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

Вы хотите, чтобы я переопределял метод абстрактного класса? Coz в абстрактном классе метод оценщик не показывает мне, что вы говорите ... –

+0

это сработало bro!) Я использовал ваше решение (сделал «значение» общедоступным, чтобы иметь доступ к фрагменту), затем @Override public void onCreate (Bundle savedInstanceState) { Пакет пучков = 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

Для сохранения данных в деятельности, вы должны overide onSaveInstanceState(). Затем вы восстанавливаете данные в onRestoreInstanceState(). Вы можете сделать все это в CrimeListActivity. PagerActivity не должен участвовать, поскольку это логическое значение не влияет на поведение этого второго действия.

+0

не хочу начинать активность для результата ... Я хочу переопределить намерение родителей, это неправильное решение, я думаю –

+0

@IlqarRasulov Почему вы хотите переопределить намерение родителей? Это не делает то, что вы хотите сделать. –

Смежные вопросы