0

Я получаю исключение во время выполнения из моего buttonfragment.class. Я делаю фрагментированную панель кнопок, каждую кнопку с ее собственным расположением и активностью. Я меняю вещи и не могу понять, где в классе фрагмента есть ошибка. БлагодаряRunTimeException в ButtonFragment class

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 

Обновление # 2 Кнопка перед добавлением фрагмента, но получалась анимация из предыдущего макета/активности. В принципе, кнопки размещаются в верхней части приложения во всех макетах и ​​действиях.

 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

ответ

1

Вы не можете создать фрагмент вроде активность:

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

Вам нужно получить экземпляр FragmentManager затем вызвать add(), заменить() `, и т.д., чтобы использовать Фрагменты в вашей деятельности.

Руководство разработчика содержит несколько подробных examples и tutorials на эту тему.


Вы должны также удалить странствующие декларации в манифесте, так как вы теперь знаете, что фрагмент не является активность:

<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

+0

Я получал анимацию от предыдущей активности, когда я нажимал кнопку для следующего макета/действия. Кроме того, когда я нажал кнопку «Назад», он перенес меня в предыдущую операцию. Я хотел исправить это, поэтому я провел некоторое исследование и обнаружил, что фрагментация исправит его. Извините заранее, за хлопот, я студент, работающий над этим как один из моих классных проектов. – DuckiesUnite

+0

Почему вы вызываете 'setContentView()' перед 'startActivity()'? Это изменит макет активности, которую вы собираетесь покинуть ... В любом случае, в то время как фрагменты отлично подходят для «отсечения» вашей деятельности, вы можете изменить переход от одного действия к другому с помощью кода [как это.] (Http: // stackoverflow.com/q/3389501/1267661) – Sam

Смежные вопросы