Android碎片强制关闭错误?

问题描述:

我正在android片段上工作,当我在android 3.0版本中运行我的应用程序时,它的工作正常,但是当我尝试运行在3.0以下时,它给出了forceclose错误,我不明白什么是错误的。以下是日志猫错误和我的代码。Android碎片强制关闭错误?

而如果在智能手机上运行我的应用程序,那么我需要在另一个windown中显示视图而不打开新的活动。你能指导我如何做到这一点。它在平板电脑上工作正常。我正在发送平板电脑的工作屏幕截图。

01-21 09:29:24.272: E/AndroidRuntime(398): FATAL EXCEPTION: main 
01-21 09:29:24.272: E/AndroidRuntime(398): java.lang.NoSuchMethodError: com.example.fragment_demo.MainActivity.getFragmentManager 
01-21 09:29:24.272: E/AndroidRuntime(398): at com.example.fragment_demo.MainActivity.onCreate(MainActivity.java:19) 
01-21 09:29:24.272: E/AndroidRuntime(398): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047) 
01-21 09:29:24.272: E/AndroidRuntime(398): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1611) 
01-21 09:29:24.272: E/AndroidRuntime(398): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1663) 
01-21 09:29:24.272: E/AndroidRuntime(398): at android.app.ActivityThread.access$1500(ActivityThread.java:117) 
01-21 09:29:24.272: E/AndroidRuntime(398): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:931) 
01-21 09:29:24.272: E/AndroidRuntime(398): at android.os.Handler.dispatchMessage(Handler.java:99) 
01-21 09:29:24.272: E/AndroidRuntime(398): at android.os.Looper.loop(Looper.java:123) 
01-21 09:29:24.272: E/AndroidRuntime(398): at android.app.ActivityThread.main(ActivityThread.java:3683) 
01-21 09:29:24.272: E/AndroidRuntime(398): at java.lang.reflect.Method.invokeNative(Native Method) 
01-21 09:29:24.272: E/AndroidRuntime(398): at java.lang.reflect.Method.invoke(Method.java:507) 
01-21 09:29:24.272: E/AndroidRuntime(398): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839) 
01-21 09:29:24.272: E/AndroidRuntime(398): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597) 
01-21 09:29:24.272: E/AndroidRuntime(398): at dalvik.system.NativeStart.main(Native Method) 



public class MainActivity extends Activity { 
    Button b1, b2, b3; 
    @Override 
    public void onCreate(Bundle savedInstanceState) 
    {  
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main_fdemo);  
     FragmentManager fm = getFragmentManager(); 
     FragmentTransaction ft = fm.beginTransaction(); 
     StartFragment sf = new StartFragment(); 
     ft.add(R.id.myFragment, sf);  
     ft.commit();  
     b1 = (Button) findViewById(R.id.button1);  
     b2 = (Button) findViewById(R.id.button2); 
     b3 = (Button) findViewById(R.id.button3); 

     b1.setOnClickListener(onButtonClick); 
     b2.setOnClickListener(onButtonClick); 
     b3.setOnClickListener(onButtonClick); 
    } 
    Button.OnClickListener onButtonClick = new Button.OnClickListener(){ 
     @Override  
     public void onClick(View v) 
     {   
      // TODO Auto-generated method stub  
      Fragment fragment = null;  
      if(v == b1){  
       fragment = new Fragment1(); 
      }else if(v == b2){  
       fragment = new Fragment2();  
      }else if(v == b3){  
       fragment = new Fragment3(); 
      }   
      FragmentTransaction ft = getFragmentManager().beginTransaction(); 
      ft.replace(R.id.myFragment, fragment);  
      ft.commit(); 
     } 
    }; 

} 

main_fdemo.xml:- 

<?xml version="1.0" encoding="UTF-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="horizontal" > 

    <LinearLayout 
     android:layout_width="wrap_content" 
     android:layout_height="match_parent" 
     android:orientation="vertical" > 

     <Button 
      android:id="@+id/button1" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:text="Fragment 1" /> 

     <Button 
      android:id="@+id/button2" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:text="Fragment 2" /> 

     <Button 
      android:id="@+id/button3" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:text="Fragment 3" /> 
    </LinearLayout> 

    <LinearLayout 
     android:id="@+id/myFragment" 
     android:layout_width="match_parent" 
     android:layout_height="fill_parent" 
     android:layout_weight="3" > 
    </LinearLayout> 

</LinearLayout> 


public class StartFragment extends Fragment 
{  
    @Override  
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) 
    {  
     // TODO Auto-generated method stub  
     return inflater.inflate(R.layout.start_fragment, container, false); 
    } 
} 

start_fragment.xml:- 

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:background="#ffffff" 
    android:orientation="vertical" > 

    <TextView 
     android:id="@+id/textView1" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:gravity="center" 
     android:text="Select the Fragments" 
     android:textSize="20dp" /> 

</LinearLayout> 

public class Fragment1 extends Fragment 
{  
    @Override  
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) 
    {  
     // TODO Auto-generated method stub  
     return inflater.inflate(R.layout.fragment_1, container, false); 
    } 
} 

fragment_1.xml code:- 

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:background="#F97C7C" 
    android:orientation="vertical" > 

    <TextView 
     android:id="@+id/textView1" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:gravity="center" 
     android:text="Select the Fragments" 
     android:textSize="20dp" /> 

</LinearLayout> 

enter image description here

您需要使用Android支持库)将下降到API 4.向后兼容当使用库,您将使用支持方法,如getSupportFragmentManager(而不是getFragmentManager()。 http://developer.android.com/training/basics/fragments/support-lib.html

+0

现在,它的工作。如果在智能手机上运行我的应用程序,那么我需要在另一个windown中显示视图,而不打开新的活动。如果我在平板电脑上运行,它应该在同一个windown右侧的*空间中运行。我为此问题发布了我的整个代码。 –

+0

以及一些方法,你可以做到这一点,而无需打开一个新的活动,你可以使用片段事务来显示/隐藏不同的片段或使用DialogFragment或其他东西..但你应该更熟悉文档中的片段,如果你有一个阅读文档后更具体的问题,您可以发布一个单独的问题。 – jfortunato

嗨请参考android文档。 Android Fragment仅在3.0及以上版本支持。所以下面3.0片段和片段管理器将不可用。如果你想使用片段和片段管理使用Android兼容库是指该链接 Support Library

您可以使用Android的支持库在低于3.0设备将片段支持 检查此链接 http://developer.android.com/training/basics/fragments/support-lib.html