我做了一个非常简单的活动这说明了一个简单的 ListFragment 象下面这样:
我的活动:
公共类MyActivity扩展FragmentActivity {
@覆盖
公共无效的onCreate(包savedInstanceState){
FragmentManager fragMgr = getSupportFragmentManager();
FirstFragment名单=新FirstFragment();
。fragMgr.beginTransaction()加(android.R.id.content,列表).commit();
}
}
我的ListFragment:
公共类FirstFragment扩展ListFragment {
@覆盖
公共查看onCreateView(LayoutInflater充气,容器的ViewGroup,捆绑savedInstanceState){
。inflater.getContext()getSystemService(Context.LAYOUT_INFLATER_SERVICE);
查看查看= inflater.inflate(R.layout.main,NULL);
返回查看;
}
@覆盖
公共无效onActivityCreated(包savedInstanceState){
super.onActivityCreated(savedInstanceState);
字符串的listContent [] = {拉里,萌,卷毛};
setListAdapter(新ArrayAdapter<字符串>(getActivity(),R.layout.list_item,的listContent));
}
...
}
当我开始我的应用程序,我得到的错误信息
java.lang.IllegalStateException:活动已被破坏
E / AndroidRuntime(947):在android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2496)
E / AndroidRuntime(947):在android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2512)
E / AndroidRuntime(947):在android.app.ActivityThread.access $ 2200(ActivityThread.java:119)
E / AndroidRuntime(947):在android.app.ActivityThread $ H.handleMessage(ActivityThread.java:1863)
E / AndroidRuntime(947):在android.os.Handler.dispatchMessage(Handler.java:99)
E / AndroidRuntime(947):在android.os.Looper.loop(Looper.java:123)
E / AndroidRuntime(947):在android.app.ActivityThread.main(ActivityThread.java:4363)
E / AndroidRuntime(947):在java.lang.reflect.Method.invokeNative(本机方法)
...
据抱怨的活动已被破坏 为什么???
P.S。 main.xml中:
< XML版本=1.0编码=UTF-8&GT?;
<的LinearLayout
的xmlns:机器人=http://schemas.android.com/apk/res/android
机器人:方向=垂直
机器人:layout_width =FILL_PARENT
机器人:layout_height =FILL_PARENT
机器人:以下属性来=8DP
机器人:paddingRight =8DP>
<按钮
机器人:layout_width =FILL_PARENT
机器人:layout_height =WRAP_CONTENT
机器人:文本=下一个/>
<的ListView
机器人:ID =@机器人:ID /列表
机器人:layout_width =FILL_PARENT
机器人:layout_height =FILL_PARENT
机器人:后台=#00FF00
机器人:layout_weight =1
机器人:drawSelectorOnTop =FALSE/>
<的TextView
机器人:ID =@机器人:ID /空
机器人:layout_width =FILL_PARENT
机器人:layout_height =FILL_PARENT
机器人:后台=#FF0000
机器人:文本=无数据/>
< / LinearLayout中>
解决方案
我也遇到了类似的问题。
我才知道这事,因为活性被破坏,而 FragmentTransaction
即将获得 .commit()
。
一个解决方案,这是为了检查是否 Activity.isFinishing()
是真还是假。
如果(!isFinishing()){
FragmentTransaction英尺= getSupportFragmentManager()
.beginTransaction();
ft.replace(SOME_RES_ID,myFragmentInstance);
ft.commit();
}
I made a very simple Activity which shows a simple ListFragment like below:
My Activity:
public class MyActivity extends FragmentActivity {
@Override
public void onCreate(Bundle savedInstanceState) {
FragmentManager fragMgr = getSupportFragmentManager();
FirstFragment list = new FirstFragment();
fragMgr.beginTransaction().add(android.R.id.content, list).commit();
}
}
My ListFragment:
public class FirstFragment extends ListFragment{
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
inflater.getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View view = inflater.inflate(R.layout.main, null);
return view;
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
String listContent[] = {"Larry", "Moe", "Curly"};
setListAdapter(new ArrayAdapter<String>(getActivity(), R.layout.list_item, listContent));
}
...
}
When I start my app, I got error message:
java.lang.IllegalStateException: Activity has been destroyed
E/AndroidRuntime( 947): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2496)
E/AndroidRuntime( 947): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2512)
E/AndroidRuntime( 947): at android.app.ActivityThread.access$2200(ActivityThread.java:119)
E/AndroidRuntime( 947): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1863)
E/AndroidRuntime( 947): at android.os.Handler.dispatchMessage(Handler.java:99)
E/AndroidRuntime( 947): at android.os.Looper.loop(Looper.java:123)
E/AndroidRuntime( 947): at android.app.ActivityThread.main(ActivityThread.java:4363)
E/AndroidRuntime( 947): at java.lang.reflect.Method.invokeNative(Native Method)
...
It complains that Activity has been destroyed, Why???
P.S. main.xml:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:paddingLeft="8dp"
android:paddingRight="8dp">
<Button
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="next" />
<ListView
android:id="@android:id/list"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="#00FF00"
android:layout_weight="1"
android:drawSelectorOnTop="false" />
<TextView
android:id="@android:id/empty"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="#FF0000"
android:text="No data" />
</LinearLayout>
解决方案
I also faced a similar problem.
I realized that this happened because the activity was being destroyed while the FragmentTransaction
was about to get .commit()
.
A solution to this was to check whether the Activity.isFinishing()
is true or not.
if (!isFinishing()) {
FragmentTransaction ft = getSupportFragmentManager()
.beginTransaction();
ft.replace(SOME_RES_ID, myFragmentInstance);
ft.commit();
}