0

[ЗАКРЫТО]метод OnCreate() не работает должным образом в Android Зефир

У меня есть две активности называется А и В.

ActivityA (запуска) показывает данные списка (RecyclerView) и данные загружается с WebService.

ActivityB показывает деталь деталя списка когда я нажимаю деталь списка.

Проблема заключается в том:

Когда я нажимаю кнопку назад от ActivityB, метод ActivityA в OnCreate() работает и повторно загрузки уже загружены, как ДАННЫЕ перезапуске приложения. Я не хочу повторно загружать или повторно вызывать метод onCreate().

Я тестировал два устройства имеет предварительно Зефир ОС:

  • Samsung Galaxy S5 (OS версии 4.4.4)
  • Sony Xperia (OS версии 4.1.2)

и результат is:

Когда я нажимаю кнопку «Назад» из ActivityB, ActivityA не перегружает. ActivityA уже показывает последний позиционированный список. Я хочу это в Зефире.

Мой Зефир устройство Nexus 5 (OS версии 6.0.1)

Как я могу решить эту проблему?

[НЕКОТОРЫХ КОД НИЖЕ]

// This is ActivityA 
public class MainView extends AppCompatActivity { 

... 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main_view); 

    ... 

    if (NetworkChecker.isNetAvailable(context)) { 
     mDataSet = update(); // this method calling WebService 
    } else { 
     mDataSet = Database.getDatas(); // this method reading datas from sqlite. 
    } 
    createListView(mDataSet); 

    ... 
} 

private void createListView(List<NamecardEntity> mDataSet) { 
    mRecyclerView = (RecyclerView) findViewById(R.id.itemsRecyclerView); 
    mRecyclerView.setHasFixedSize(true); 
    RecyclerView.ItemDecoration itemDecoration = 
      new DividerItemDecorator(getContext(), LinearLayoutManager.VERTICAL); 
    mRecyclerView.addItemDecoration(itemDecoration); 

    LinearLayoutManager mLayoutManager = new LinearLayoutManager(getContext()); 
    mRecyclerView.setLayoutManager(mLayoutManager); 

    mAdapter = new ListAdapter(getActivity(), getActivity().getApplicationContext(), mDataSet); 
    mRecyclerView.setAdapter(mAdapter); 
    mRecyclerView.addOnScrollListener(onScrollListener); 
} 

... 
} 

public class ListAdapter extends RecyclerSwipeAdapter<ListAdapter.SimpleViewHolder> { 

... 

@Override 
public void onBindViewHolder(final SimpleViewHolder viewHolder, final int position) { 
    Entity item = mDataset.get(position); 

    ... 

    viewHolder.front.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      activity.startActivity(new Intent(mContext, DetailView.class)); 
     } 
    }); 

    ... 
} 

} 

// This is ActivityB 
public class DetailView extends AppCompatActivity { 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.detail_view); 

    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
    setSupportActionBar(toolbar); 
    if (getSupportActionBar() != null) { 
     getSupportActionBar().setTitle(""); 
     getSupportActionBar().setDisplayHomeAsUpEnabled(true); 
    } 

    ... 
} 

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    getMenuInflater().inflate(R.menu.menu_activity_filter, menu); 
    return true; 
} 

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    switch (item.getItemId()) { 
     case android.R.id.home: 
      finish(); 
      return true; 
     case R.id.action_filter: 
      // TODO filter 
      return true; 
    } 
    return true; 
} 
} 

// In Manifest.xml 
<application 
android:allowBackup="true" 
android:icon="@mipmap/ic_launcher" 
android:label="@string/app_name" 
android:supportsRtl="true" 
android:theme="@style/AppTheme"> 

<activity 
    android:name=".MainView" 
    android:label="@string/app_name" 
    android:screenOrientation="portrait" 
    android:theme="@style/AppTheme.NoActionBar"> 
    <intent-filter> 
     <action android:name="android.intent.action.MAIN" /> 

     <category android:name="android.intent.category.LAUNCHER" /> 
    </intent-filter> 
</activity> 

<activity 
    android:name=".DetailView" 
    android:screenOrientation="portrait" 
    android:theme="@style/AppTheme.NoActionBar" /> 
</application> 

[Изменено] Я НАШЕЛ REASEN

я ставлю некоторые Вход в ActivityA Lifecycle, и результат:

Когда я запустить приложение на Xperia.(Предварительный результат теста Зефир):

ActivityA состояние журнала:

  • OnCreate
  • OnStart
  • onResume

затем выберите элемент списка и начиная ActivityB

ActivityA государственный журнал:

  • OnPause
  • OnStop

затем я нажимаю кнопку назад от ActivityB и перейдите обратно в

ActivityA состояние журнала:

  • onRestart
  • OnStart
  • onResume

Когда я запустить приложение на Nexus 5. (результат теста Зефир):

ActivityA состояние журнала:

  • OnCreate
  • OnStart
  • onResume

затем выберите элемент списка и начиная ActivityB

ActivityA состояние журнала:

  • OnPause
  • OnStop
  • OnDestroy < - это причина, почему этот метод называется в Зефир

затем я нажимаю кнопку «Назад» из ActivityB и вернусь назад к A

ActivityA состояние журнала:

  • OnCreate < - OnCreate() называется, вызывают onDestory() называется уже, это проблема
  • OnStart
  • onResume

ДЕФЕКТИВНОСТЬ ДЕЯТЕЛЬНОСТИ РАБОТАЕТ РАЗЛИЧНЫМИ В МАРШАМЛЛАХЕ, ПОЧЕМУ? ПОЧЕМУ Я ПОЛУЧИЛ ПРОБЛЕМУ.PLS HELP

+0

Пожалуйста, отправьте код? – Raghavendra

+0

Является ли Activity A объявленным любым специальным 'launchMode' или другими атрибутами, например' noHistory'? –

+0

@Raghavendra: ok опубликует некоторый код КАК МОЖНО СКОРЕЕ – tsomone

ответ

0

Android Marshmallow работает нормально. У вас есть эта проблема, потому что вы не правильно придерживались жизненного цикла деятельности.

enter image description here

Обратите внимание, что до Android уничтожить Activity или нет. Вы должны учитывать это. Оказывается в вашем случае на предыдущих версиях Android ваш Activity был уничтожен, поэтому, когда вы перешли назад, он прошел через onCreate(). Теперь он не уничтожает его, поэтому он не проходит через onCreate().

Правильный способ для обновления данных является всегда сделать это на методе onResume(), чтобы убедиться, что он будет называться не имеет значения, если Android уничтожает Activity или нет.

+0

Я опубликовал некоторый результат, см. Мое редактирование выше. – tsomone

+0

@TsomoNe Ваше правление - это именно то, что я уже говорил вам. Я также сказал вам, почему цикл «отличается» от Marshmallow (фактически, он НЕ отличается) и как его исправить. Вы попробовали решение, которое я предлагаю? – m0skit0

+0

да я сделал, спасибо – tsomone