0

Я недавно начал изучать андроид. Поэтому я делал фрагмент темы, когда я решил самостоятельно создать фрагмент. Ниже приведен код, который я написал. Однако при запуске кода эмулятор показывает, что «фрагмент2 остановлен». Пожалуйста, взгляните на мой код и скажите мне, где я ошибаюсь. Заранее спасибо.Нужна помощь в фрагментах (Android)

1.fragment

package com.example.adi.fragment2; 

import android.support.annotation.Nullable; 
import android.support.v4.app.Fragment; 
import android.support.v4.app.FragmentActivity; 
import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.Button; 
import android.widget.EditText; 
import android.widget.TextView; 

import org.w3c.dom.Text; 

public class MainActivity extends Fragment { 

    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
     View view = inflater.inflate(R.layout.activity_main,container,false); 
     final EditText editText = (EditText)view.findViewById(R.id.editText); 
     final TextView textView = (TextView)view.findViewById(R.id.textView); 
     Button button = (Button) view.findViewById(R.id.button); 
     button.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       textView.setText(editText.getText().toString()); 
      } 
     }); 
     return view; 
    } 
} 

2.Main пусковая активность

package com.example.adi.fragment2; 

import android.os.Bundle; 
import android.support.annotation.Nullable; 
import android.support.v4.app.Fragment; 
import android.support.v4.app.FragmentActivity; 
import android.support.v4.app.FragmentManager; 
import android.support.v4.app.FragmentTransaction; 



public class Launcher extends FragmentActivity { 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     FragmentManager fm = getSupportFragmentManager(); 
     Fragment fragment = fm.findFragmentById(R.id.box); 
     if(fragment==null) { 
      fragment = new MainActivity(); 
      fm.beginTransaction().add(R.id.box, fragment).commit(); 
     } 
    } 
} 

редактировать: Вот статус журнала

01-07 06:05:26.423 2183-2183/? I/art: Late-enabling -Xcheck:jni 
01-07 06:05:26.423 2183-2183/? W/art: Unexpected CPU variant for X86 using defaults: x86 
01-07 06:05:26.550 2183-2183/com.example.adi.fragment2 W/System: ClassLoader referenced unknown path: /data/app/com.example.adi.fragment2-2/lib/x86 
01-07 06:05:26.573 2183-2183/com.example.adi.fragment2 I/InstantRun: Instant Run Runtime started. Android package is com.example.adi.fragment2, real application class is null. 
01-07 06:05:26.944 2183-2183/com.example.adi.fragment2 W/System: ClassLoader referenced unknown path: /data/app/com.example.adi.fragment2-2/lib/x86 
01-07 06:05:26.985 2183-2183/com.example.adi.fragment2 D/AndroidRuntime: Shutting down VM 
01-07 06:05:26.986 2183-2183/com.example.adi.fragment2 E/AndroidRuntime: FATAL EXCEPTION: main 
      Process: com.example.adi.fragment2, PID: 2183 
      java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.example.adi.fragment2/com.example.adi.fragment2.MainActivity}: java.lang.ClassCastException: com.example.adi.fragment2.MainActivity cannot be cast to android.app.Activity 
       at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2548) 
       at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2707) 
       at android.app.ActivityThread.-wrap12(ActivityThread.java) 
       at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1460) 
       at android.os.Handler.dispatchMessage(Handler.java:102) 
       at android.os.Looper.loop(Looper.java:154) 
       at android.app.ActivityThread.main(ActivityThread.java:6077) 
       at java.lang.reflect.Method.invoke(Native Method) 
       at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:865) 
       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:755) 
       Caused by: java.lang.ClassCastException: com.example.adi.fragment2.MainActivity cannot be cast to android.app.Activity 
       at android.app.Instrumentation.newActivity(Instrumentation.java:1078) 
       at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2538) 
       at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2707)  
       at android.app.ActivityThread.-wrap12(ActivityThread.java)  
       at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1460)  
       at android.os.Handler.dispatchMessage(Handler.java:102)  
       at android.os.Looper.loop(Looper.java:154)  
       at android.app.ActivityThread.main(ActivityThread.java:6077)  
       at java.lang.reflect.Method.invoke(Native Method)  
       at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:865)  
       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:755)  
+0

не могли бы вы оставить сообщение о статусе регистрации? –

+0

Я поставил статус журнала выше! – hamster

ответ

0

Вы не добавили FragmentTransaction в свой код.

Не забудьте импортировать

ли это в OnCreate menthod

FragmentManager fm = getSupportFragmentManager(); 
     FragmentTransaction ft = fm.beginTransaction(); 
     ft.replace(R.id.content_frame, fragment);//add this only if add() doesn't work 
     ft.commit(); 

Не забудьте импортировать

import android.support.v4.app.FragmentTransaction; 

И убедитесь, что вы импортировали только этот класс для всех методов

Этот класс позволяет иметь обратную совместимость для предыдущих версий.

Это должно решить. Счастливое кодирование.

+0

СПАСИБО ЭТО РАБОТАЕТ. – hamster

+0

Рад, что я мог бы помочь !! –

0

Я не полный код, так что я не могу быть 100% уверен. Но вместо добавления попробуйте использовать replace в менеджере фрагментов, можно исправить это, если уже есть фрагмент по умолчанию, показанный ниже.

Изменить

fm.beginTransaction().add(R.id.box, fragment).commit(); 

Для

fm.beginTransaction().replace(R.id.box, fragment).commit(); 
0

внимательно посмотреть на

java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.example.adi.fragment2/com.example.adi.fragment2.MainActivity}: java.lang.ClassCastException: com.example.adi.fragment2.MainActivity cannot be cast to android.app.Activity 

Это говорит com.example.adi.fragment2.MainActivity cannot be cast to android.app.Activity. Ваш MainActivity фактически Fragment

public class MainActivity extends Fragment{ 

} 

Используйте смысловое имя для своих классов.

0

Это магическая Log Line:

java.lang.ClassCastException: com.example.adi.fragment2.MainActivity cannot be cast to android.app.Activity 

В основном ваша основная деятельность расширяет класс FragmentActivity, и я предполагаю, что в файле Xml фрагмента вы используете android.app.Fragment

Вы также можете обратиться к этому answer для дальнейшей информации

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