«java.lang.IllegalStateException: активность была уничтожена» после возобновления FragmentActivity на AndroidAndroid

Форум для тех, кто программирует под Android
Ответить Пред. темаСлед. тема
Anonymous
 «java.lang.IllegalStateException: активность была уничтожена» после возобновления FragmentActivity на Android

Сообщение Anonymous »

Я использую этот подход: отдельный задний стек для каждой вкладки в Android с использованием фрагментов

Я пытаюсь отправить фрагмент из первого фрагмента, после возобновления FragmentActivity этого действия вызывает ошибку «Активность была уничтожена». Когда вы отправляете фрагмент в первый раз, он работает нормально, но когда я приостанавливаю (сворачиваю приложение) эту FragmentActivity, снова открываю его и затем пытаюсь отправить фрагмент, он выдает ошибку. Я знаю, что этот вопрос уже задавался много раз, но я не смог получить никакого решения.

Ошибка

02-05 11:51:01.889: E/AndroidRuntime(379): FATAL EXCEPTION: main
02-05 11:51:01.889: E/AndroidRuntime(379): java.lang.IllegalStateException: Activity has been destroyed
02-05 11:51:01.889: E/AndroidRuntime(379): at android.support.v4.app.FragmentManagerImpl.enqueueAction(FragmentManager.java:1365)
02-05 11:51:01.889: E/AndroidRuntime(379): at android.support.v4.app.BackStackRecord.commitInternal(BackStackRecord.java:595)
02-05 11:51:01.889: E/AndroidRuntime(379): at android.support.v4.app.BackStackRecord.commitAllowingStateLoss(BackStackRecord.java:578)
02-05 11:51:01.889: E/AndroidRuntime(379): at com.app.main.AppMainTabActivity.pushFragments(AppMainTabActivity.java:650)
02-05 11:51:01.889: E/AndroidRuntime(379): at com.app.home.Home$ExpandableListAdapter$1.onClick(Home.java:530)
02-05 11:51:01.889: E/AndroidRuntime(379): at android.view.View.performClick(View.java:2408)
02-05 11:51:01.889: E/AndroidRuntime(379): at android.view.View$PerformClick.run(View.java:8816)
02-05 11:51:01.889: E/AndroidRuntime(379): at android.os.Handler.handleCallback(Handler.java:587)
02-05 11:51:01.889: E/AndroidRuntime(379): at android.os.Handler.dispatchMessage(Handler.java:92)
02-05 11:51:01.889: E/AndroidRuntime(379): at android.os.Looper.loop(Looper.java:123)
02-05 11:51:01.889: E/AndroidRuntime(379): at android.app.ActivityThread.main(ActivityThread.java:4627)
02-05 11:51:01.889: E/AndroidRuntime(379): at java.lang.reflect.Method.invokeNative(Native Method)
02-05 11:51:01.889: E/AndroidRuntime(379): at java.lang.reflect.Method.invoke(Method.java:521)
02-05 11:51:01.889: E/AndroidRuntime(379): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)
02-05 11:51:01.889: E/AndroidRuntime(379): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:626)
02-05 11:51:01.889: E/AndroidRuntime(379): at dalvik.system.NativeStart.main(Native Method)


Я нажимаю элемент расширяемого списка в первом фрагменте, который перемещает второй фрагмент. Я показываю ошибку в BaseExpandableListAdapter.

Метод Push and Pop в AppMainFragmentActivity

public void pushFragments(String tag, Fragment fragment, boolean shouldAnimate, boolean shouldAdd) {
if (shouldAdd) {
mStacks.get(tag).push(fragment);
}

if (!isFinishing()) {
FragmentManager manager = getSupportFragmentManager();
FragmentTransaction ft = manager.beginTransaction();
if (shouldAnimate)
ft.setCustomAnimations(R.anim.slide_in_right, R.anim.slide_out_left);
ft.replace(R.id.realtabcontent, fragment);
ft.commit();
}
else {
FragmentManager manager = getSupportFragmentManager();
FragmentTransaction ft = manager.beginTransaction();
if (shouldAnimate)
ft.setCustomAnimations(R.anim.slide_in_right, R.anim.slide_out_left);
ft.replace(R.id.realtabcontent, fragment);
ft.addToBackStack(null);
ft.commitAllowingStateLoss();//error shows here also.
}
}

public void popFragments() {
/*if (!isFinishing()) { }*/
Fragment fragment = mStacks.get(mCurrentTab).elementAt(mStacks.get(mCurrentTab).size() - 2);
/*pop current fragment from stack.. */
mStacks.get(mCurrentTab).pop();

FragmentManager manager = getSupportFragmentManager();
FragmentTransaction ft = manager.beginTransaction();
ft.setCustomAnimations(R.anim.slide_in_left, R.anim.slide_out_right);
ft.replace(R.id.realtabcontent, fragment);
ft.commit();
}


Главный фрагмент

public class Firstfragment extends BaseFragment
{
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
}

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

}

private void setupActionBar() {
// TODO Auto-generated method stub

actionBar = getSherlockActivity().getSupportActionBar();

actionBar.setDisplayHomeAsUpEnabled(false);

actionBar.setDisplayShowCustomEnabled(true);
actionBar.setDisplayShowHomeEnabled(false);
actionBar.setDisplayShowTitleEnabled(false);
View cView = getSherlockActivity().getLayoutInflater().inflate(R.layout.actionbarbutton, null);
final TextView cTitletext = (TextView) cView.findViewById(R.id.action_title_home);
final ImageButton cSection_Menu = (ImageButton) cView.findViewById(R.id.imgbtn_1);

actionBar.setCustomView(cView);
cSection_Menu.setImageResource(R.drawable.section);
cSection_Menu.setVisibility(View.VISIBLE);

cTitletext.setVisibility(View.VISIBLE);
}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.home_newspaper_list, container,false);
lv = (ExpandableListView) view.findViewById(R.id.newspapers_expandable);

setHasOptionsMenu(true);
return view;
}

@Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
flag = true;
outState.putBoolean("flag", flag);
}

@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
super.onCreateOptionsMenu(menu, inflater);
}

@Override
public void onPause() {
super.onPause();
flag = true;
AppConstants.isFromHomeDetailView = false;
index = lv.getFirstVisiblePosition();
}

@Override
public void onStop() {
// TODO Auto-generated method stub
super.onStop();
}

@Override
public void onResume() {
super.onResume();
lv.setSelectionFromTop(index, 0);

System.out.println(" onResume Started > "+flag);
setupActionBar();
}

@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);

HashMap nlist = ma.newspaper_list;
ArrayList languagelist = ma.languagelist;

expListAdapter = new ExpandableListAdapter(getActivity(), languagelist, nlist);

lv.setAdapter(expListAdapter);
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
return false;
}

public class ExpandableListAdapter extends BaseExpandableListAdapter
{

/* methods for BaseExpandableListAdapterlike getchildcount() etc. */

@Override
public View getChildView(final int groupPosition, final int childPosition, boolean isLastChild, View convertView, ViewGroup parent) {
View view = null;
view.setOnClickListener(new OnClickListener() {
@Override
public void onClick(final View v) {
secondfragment nl = new secondfragment ();
mActivity.pushFragments(AppConstants.TAB_A,nl,true, true);//****error on that line after resuming activity**.**
}
});
return view;
}
}

}


Подробнее здесь: https://stackoverflow.com/questions/215 ... esuming-th
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Android»