2013-03-25 46 views
0

我从我的buttonfragment.class中获取运行时异常。我做了一个零碎的按钮栏,每个按钮都有自己的布局和活动。我一直在改变事情,无法弄清楚片段类中的错误在哪里。由于ButtonFragment类中的RunTimeException

MainActivity.java

public class MainActivity extends Activity { 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    Button btn1 =(Button)findViewById(R.id.btn1); 
    Button btn2 =(Button)findViewById(R.id.btn2); 
    Button btn3 =(Button)findViewById(R.id.btn3); 
    Button btn4 =(Button)findViewById(R.id.btn4); 

    btn1.setOnClickListener(new Button.OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      Intent i = new Intent(); 
      i = new Intent(MainActivity.this, ButtonFragment1.class); 
      setContentView(R.layout.activity_main); 
      startActivity(i); 
     } 
    }); 

    btn2.setOnClickListener(new Button.OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      Intent i = new Intent(); 
      i = new Intent(MainActivity.this, ButtonFragment2.class); 
      i.setAction(Intent.ACTION_VIEW); 
      i.setData(android.provider.MediaStore.Images.Media.INTERNAL_CONTENT_URI); 
      setContentView(R.layout.agil_main); 
      startActivity(i); 
     } 
    }); 


    btn3.setOnClickListener(new Button.OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      Intent i = new Intent(); 
      i = new Intent(MainActivity.this, ButtonFragment3.class); 
      i.setAction(Intent.ACTION_VIEW); 
      i.setData(android.provider.MediaStore.Images.Media.INTERNAL_CONTENT_URI); 
      setContentView(R.layout.int_main); 
      startActivity(i); 
     } 
    }); 


    btn4.setOnClickListener(new Button.OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      Intent i = new Intent(); 
      i = new Intent(MainActivity.this, ButtonFragment4.class); 
      i.setAction(Intent.ACTION_VIEW); 
      i.setData(android.provider.MediaStore.Images.Media.INTERNAL_CONTENT_URI); 
      setContentView(R.layout.misc_main); 
      startActivity(i); 
     } 
    }); 
}} 

ButtonFragment1.java

public class ButtonFragment1 extends Fragment implements OnClickListener 
{ 

private static final String TAG = null; 
protected static final Context context=null; 

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

} 
public void onActivityCreated(Bundle savedInstanceState) 
{  
super.onActivityCreated(savedInstanceState); 

}  

public View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle  savedInstanceState)  
{ 

    View view = inflater.inflate(R.layout.activity_main, container, false);  

Button Btn = (Button) view.findViewById(R.id.btn1); 

    Btn.setOnClickListener(this); 

      return view; 
} 


public void onClick(View v) 
{ 

     if(v.getId()==R.id.btn1) 
    { 
       // TODO Auto-generated method stub 

    startActivity(new Intent(v.getContext(),MainActivity.class));  
      } 
    } 
} 

buttonbar.xml

<?xml version="1.0" encoding="utf-8"?> 
<TableLayout 
xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:orientation="vertical" 
android:shrinkColumns="*" 
android:stretchColumns="*" 
android:background="#6B1414">  
<TableRow 
    android:id="@+id/tableRow1" 
    android:layout_height="fill_parent" 
    android:layout_width="fill_parent"> 
    <Button 
     android:id="@+id/btn1" 
     android:text="@string/Str" 
     android:textStyle="bold" 
     android:layout_width="0dip" 
     android:layout_height="wrap_content" 
     android:padding="18dip" 
     android:layout_weight="1" 
     android:background="#424242" 
     android:textColor="#ffffff" 
     android:gravity="center"/> 
    <Button 
     android:id="@+id/btn2" 
     android:text="@string/Agl" 
     android:textStyle="bold" 
     android:layout_width="0dip" 
     android:layout_height="wrap_content" 
     android:padding="18dip" 
     android:layout_weight="1" 
     android:background="#424242" 
     android:textColor="#ffffff" 
     android:gravity="center"/> 
    <Button 
     android:id="@+id/btn3" 
     android:text="@string/Int" 
     android:textStyle="bold" 
     android:layout_width="0dip" 
     android:layout_height="wrap_content" 
     android:padding="18dip" 
     android:layout_weight="1" 
     android:background="#424242" 
     android:textColor="#ffffff" 
     android:gravity="center"/> 
    <Button 
     android:id="@+id/btn4" 
     android:text="@string/Misc" 
     android:textStyle="bold" 
     android:layout_width="0dip" 
     android:layout_height="wrap_content" 
     android:layout_weight="1" 
     android:background="#424242" 
     android:textColor="#ffffff" 
     android:padding="18dip"/> 
</TableRow> 
</TableLayout> 

AndroidManifest.xml中

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
package="com.killerphone.dota2sounds" 
android:versionCode="1" 
android:versionName="1.0" > 

<uses-sdk 
    android:minSdkVersion="8" 
    android:targetSdkVersion="17" /> 

<application 
    android:allowBackup="true" 
    android:icon="@drawable/ic_launcher" 
    android:label="@string/app_name" 
    android:theme="@android:style/Theme.NoTitleBar" > 
    <activity 
     android:name="com.killerphone.dota2sounds.MainActivity" 
     android:screenOrientation="portrait" 
     android:label="@string/app_name" > 
     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 
      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
    </activity> 
    <activity android:name=".MainAgil"></activity> 
    <activity android:name=".MainInt"></activity> 
    <activity android:name=".MainMisc"></activity> 
    <activity android:name=".ButtonFragment1"></activity> 
    <activity android:name=".ButtonFragment2"></activity> 
    <activity android:name=".ButtonFragment3"></activity> 
    <activity android:name=".ButtonFragment4"></activity> 
</application> 

更新:发布跟踪错误 - 我可以进入下一个布局/活动,但之后它会崩溃。

03-25 15:08:16.705: D/AndroidRuntime(3438): Shutting down VM 
03-25 15:08:16.705: W/dalvikvm(3438): threadid=1: thread exiting with uncaught exception (group=0x4001d5a0) 
03-25 15:08:16.705: E/AndroidRuntime(3438): FATAL EXCEPTION: main 
03-25 15:08:16.705: E/AndroidRuntime(3438): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.killerphone.dota2sounds/com.example.test.ButtonFragment2}: java.lang.ClassCastException: com.example.test.ButtonFragment2 
03-25 15:08:16.705: E/AndroidRuntime(3438):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1849) 
03-25 15:08:16.705: E/AndroidRuntime(3438):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1960) 
03-25 15:08:16.705: E/AndroidRuntime(3438):  at android.app.ActivityThread.access$1500(ActivityThread.java:145) 
03-25 15:08:16.705: E/AndroidRuntime(3438):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1045) 
03-25 15:08:16.705: E/AndroidRuntime(3438):  at android.os.Handler.dispatchMessage(Handler.java:99) 
03-25 15:08:16.705: E/AndroidRuntime(3438):  at android.os.Looper.loop(Looper.java:150) 
03-25 15:08:16.705: E/AndroidRuntime(3438):  at android.app.ActivityThread.main(ActivityThread.java:4369) 
03-25 15:08:16.705: E/AndroidRuntime(3438):  at java.lang.reflect.Method.invokeNative(Native Method) 
03-25 15:08:16.705: E/AndroidRuntime(3438):  at java.lang.reflect.Method.invoke(Method.java:507) 
03-25 15:08:16.705: E/AndroidRuntime(3438):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:846) 
03-25 15:08:16.705: E/AndroidRuntime(3438):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:604) 
03-25 15:08:16.705: E/AndroidRuntime(3438):  at dalvik.system.NativeStart.main(Native Method) 
03-25 15:08:16.705: E/AndroidRuntime(3438): Caused by: java.lang.ClassCastException: com.example.test.ButtonFragment2 
03-25 15:08:16.705: E/AndroidRuntime(3438):  at android.app.Instrumentation.newActivity(Instrumentation.java:1061) 
03-25 15:08:16.705: E/AndroidRuntime(3438):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1841) 
03-25 15:08:16.705: E/AndroidRuntime(3438):  ... 11 more 
03-25 15:08:16.806: D/dalvikvm(3438): GC_CONCURRENT freed 234K, 48% free 2974K/5639K, external 0K/0K, paused 3ms+2ms 
03-25 15:08:18.157: I/Process(3438): Sending signal. PID: 3438 SIG: 9 

Update#2添加Fragment之前的按钮,但正在从之前的布局/活动中获取动画。基本上,按钮在所有布局和活动中都放置在应用程序的顶部。

 btn1.setOnClickListener(new Button.OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      Intent i = new Intent(); 
      i = new Intent(getApplicationContext(), MainActivity.class); 
      i.setAction(Intent.ACTION_VIEW); 
      i.setData(android.provider.MediaStore.Images.Media.INTERNAL_CONTENT_URI); 
      setContentView(R.layout.activity_main); 
      startActivity(i); 
     } 
    }); 
+1

发布带有错误的堆栈跟踪。 – sebster 2013-03-25 22:00:29

回答

1

您不能启动像的活性的片段:

new Intent(MainActivity.this, ButtonFragment1.class); 

你需要获取FragmentManager的一个实例,然后调用add(),更换()`等使用活动中的碎片。

开发人员指南在此主题上有多个详细的examplestutorials


你也应该删除错误的声明中您的清单,因为你现在知道,一个片段是不是一个活动:

<activity android:name=".ButtonFragment1"></activity> 


会怎样我为每个按钮获取活动类和FragmentManager类?

老实说,我不明白你想用你的ButtonFragments做什么,所以我不能帮你做具体事情,但我可以指出你在正确的方向。里面的活动(或FragmentActivity),当你想创建你片段使用的副本:

ButtonFragment buttonFrag = new ButtonFragment(); 
// Use setArguments() to pass extras to your Fragment 
getFragmentManager().beginTransaction().add(R.id.fragment_container, buttonFrag).commit(); 

这是一个片段添加到您的布局的正确方法。

+0

我将如何获取每个按钮的活动类和FragmentManager类? – DuckiesUnite 2013-03-25 22:26:19

+0

当我按下按钮进行下一个布局/活动时,我正从上一个活动中获取动画。另外,当我点击后退按钮时,它将我带到上一个活动。我想弥补这一点,所以我做了一些研究,发现碎片会纠正它。对不起,为了麻烦,我是一名学生,作为我的一个班级项目工作。 – DuckiesUnite 2013-03-25 22:44:32

+0

为什么在'startActivity()'之前调用'setContentView()'?这将改变你即将离开的活动的布局......无论如何,虽然碎片很适合“划分”你的活动,但你可以通过代码来改变从一个活动到另一个活动的转换[像这样。](http:// stackoverflow.com/q/3389501/1267661) – Sam 2013-03-26 00:26:01