IllegalStateException活动已被破坏错误android
问题描述:
我正在开发一个项目,它在mainactivity的左侧和右侧有两个滑块菜单。当左侧滑块打开时,它显示了四个项目的列表。单击列表中的一个项目希望被一个fragment.So我通过列表视图的mainactivity.The码的整数现在的位置来代替在主活性的FrameLayout如下所示:IllegalStateException活动已被破坏错误android
在mainActivity
package com.navdrawer.demo.simple;
import com.navdrawer.SimpleSideDrawer;
import android.os.Bundle;
import android.app.Activity;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.ListView;
public class MainActivity extends Activity {
private SimpleSideDrawer mNav;
Button btn1;
RightFragment rf;
ListView lv_countries;
String[] values;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
values = new String[] {
"Android List View",
"Adapter implementation",
"Simple List View In Android",
"Create List View Android",
"Android Example",
"List View Source Code",
"List View Array Adapter",
"Android Example List View"
};
mNav = new SimpleSideDrawer(this);
mNav.setLeftBehindContentView(R.layout.activity_behind_left_simple);
findViewById(R.id.leftBtn).setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
mNav.toggleLeftDrawer();
}
});
mNav.setRightBehindContentView(R.layout.activity_behind_right_simple);
final LayoutInflater factory = getLayoutInflater();
final View textEntryView = factory.inflate(R.layout.activity_behind_right_simple, null);
lv_countries = (ListView) textEntryView.findViewById(R.id.lv_countries);
ArrayAdapter<String> adapter =new ArrayAdapter<String>(getApplicationContext(),android.R.layout.simple_list_item_1,values);
lv_countries.setAdapter(adapter);
findViewById(R.id.rightBtn).setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
//rf=new RightFragment();
mNav.toggleRightDrawer();
}
});
}
}
的leftfragment:
package com.example.facebook.slideoutmenu;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentTransaction;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.webkit.WebView.FindListener;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ArrayAdapter;
import android.widget.ListView;
//Left Menu
public class LeftMenuFragment extends Fragment {
ListView lv_settings;
String[] values;
ArrayAdapter<String> adapter;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view=inflater.inflate(R.layout.leftmenu, container, false);
lv_settings=(ListView) view.findViewById(R.id.lv_settings);
values=new String[]{"Dashboard","View Jobs","Support","About"};
adapter=new ArrayAdapter<String>(getActivity(),android.R.layout.simple_list_item_1,values);
lv_settings.setAdapter(adapter);
lv_settings.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
long arg3) {
new MainActivity().displayfragment(arg2);
}
});
return view;
}
}
我从左边的片段调用displayfragment
主要活动的方法如下:new MainActivity().displayfragment(arg2);
。
,但我得到以下错误的logcat:
09-23 09:50:07.078: E/AndroidRuntime(10839): FATAL EXCEPTION: main
09-23 09:50:07.078: E/AndroidRuntime(10839): java.lang.IllegalStateException: Activity has been destroyed
09-23 09:50:07.078: E/AndroidRuntime(10839): at android.support.v4.app.FragmentManagerImpl.enqueueAction(FragmentManager.java:1342)
09-23 09:50:07.078: E/AndroidRuntime(10839): at android.support.v4.app.BackStackRecord.commitInternal(BackStackRecord.java:595)
09-23 09:50:07.078: E/AndroidRuntime(10839): at android.support.v4.app.BackStackRecord.commit(BackStackRecord.java:574)
09-23 09:50:07.078: E/AndroidRuntime(10839): at com.example.facebook.slideoutmenu.MainActivity.displayfragment(MainActivity.java:258)
09-23 09:50:07.078: E/AndroidRuntime(10839): at com.example.facebook.slideoutmenu.LeftMenuFragment$1.onItemClick(LeftMenuFragment.java:43)
09-23 09:50:07.078: E/AndroidRuntime(10839): at android.widget.AdapterView.performItemClick(AdapterView.java:284)
09-23 09:50:07.078: E/AndroidRuntime(10839): at android.widget.ListView.performItemClick(ListView.java:3701)
09-23 09:50:07.078: E/AndroidRuntime(10839): at android.widget.AbsListView$PerformClick.run(AbsListView.java:1970)
09-23 09:50:07.078: E/AndroidRuntime(10839): at android.os.Handler.handleCallback(Handler.java:587)
09-23 09:50:07.078: E/AndroidRuntime(10839): at android.os.Handler.dispatchMessage(Handler.java:92)
09-23 09:50:07.078: E/AndroidRuntime(10839): at android.os.Looper.loop(Looper.java:130)
09-23 09:50:07.078: E/AndroidRuntime(10839): at android.app.ActivityThread.main(ActivityThread.java:3689)
09-23 09:50:07.078: E/AndroidRuntime(10839): at java.lang.reflect.Method.invokeNative(Native Method)
09-23 09:50:07.078: E/AndroidRuntime(10839): at java.lang.reflect.Method.invoke(Method.java:507)
09-23 09:50:07.078: E/AndroidRuntime(10839): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:842)
09-23 09:50:07.078: E/AndroidRuntime(10839): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:600)
09-23 09:50:07.078: E/AndroidRuntime(10839): at dalvik.system.NativeStart.main(Native Method)
在这条线所示的错误:
fragmentTransaction.commit();
我看到被问及同样的错误几个问题,但我还没有发现答案尚未解决。请帮助。
displayfragment方法:
public void displayfragment(int position)
{
switch(position)
{
case 0:
{
Fragment fragment=new DashboardFragment();
FragmentManager fragmentManager = getSupportFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
fragmentTransaction.replace(R.id.menuPanel,fragment);
fragmentTransaction.addToBackStack(null);
fragmentTransaction.commit();
}
//MainActivity activity=new MainActivity();
if(isExpanded)
{
isExpanded = false;
// Collapse
new CollapseAnimation(slidingPanel, panelWidth1,
TranslateAnimation.RELATIVE_TO_SELF, 0.75f,
TranslateAnimation.RELATIVE_TO_SELF, 0.0f, 0, 0.0f,
0, 0.0f);
}
}
}
答
你LeftMenuFragment是建立在你的onItemClick新MainActivity。这不起作用。
Android代表您创建活动,并且它应该已经在运行并附加到您的片段。相反,您应该使用Fragment提供的getActivity()方法来检索MainActivity。
我假设你有一个在你的MainActivity中定义的“displayfragment”方法?如果您需要调用一样,任何自定义方法,只投getActivity()来MainActivity的结果,第一个是这样的:
MainActivity mainActivity = (MainActivity)getActivity();
if (mainActivity != null) // Make sure we are attached
{
mainActivity.displayFragment(arg2);
}
哪里是这条线'fragmentTransaction.commit();'?? – 2014-09-23 04:41:29
显示'displayfragment'方法的代码也... – 2014-09-23 04:42:43
fragmentTransaction.commit();在displayfragment方法中:参见编辑 – 2014-09-23 04:43:27