2015-03-30 2 views
0

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

Activity class 
public class Second extends Activity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     requestWindowFeature(Window.FEATURE_NO_TITLE); 
     getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, 
       WindowManager.LayoutParams.FLAG_FULLSCREEN); 
     setContentView(R.layout.activity_second); 

    } 

    public void onClickNext(View view) { 
     Intent intent = new Intent(Second.this, MainActivity.class); 
     startActivityForResult(intent, 400); 
     overridePendingTransition(R.anim.slide_in_top, R.anim.slide_out_bottom); 
    } 

    @Override 
    protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
     overridePendingTransition(R.anim.slide_in_bottom, R.anim.slide_out_top); 
    } 

    public void btnHome(View view) { 
     Intent intent = new Intent(Second.this, Welcome.class); 
     startActivity(intent); 
    } 

    public void aboutUsClick(View view) { 
     Fragment fragment = null; 
     fragment = new AboutFragment(); 


     startActivity(new Intent(this, AboutFragment.class)); 


    } 
} 

Фрагмент класса

package com.example.lunetta; 

import android.app.Fragment; 
import android.os.Bundle; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 

public class AboutFragment extends Fragment{ 


    public AboutFragment(){ 

    } 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState){ 
     View view = inflater.inflate(R.layout.fragment_layout_about, container, 
       false); 
     return view; 
    } 

} 

Android Manifest

<activity 
      android:name="com.example.lunetta.AboutFragment" 
      android:label="@string/title_fragment_layout_about" > 
</activity> 

Я получил эту ошибку типа в журнале кошки

03-30 10:24:34.876: E/AndroidRuntime(5299): FATAL EXCEPTION: main 
03-30 10:24:34.876: E/AndroidRuntime(5299): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.example.lunetta/com.example.lunetta.AboutFragment}: java.lang.ClassCastException: com.example.lunetta.AboutFragment cannot be cast to android.app.Activity 
03-30 10:24:34.876: E/AndroidRuntime(5299):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2106) 
03-30 10:24:34.876: E/AndroidRuntime(5299):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2230) 
03-30 10:24:34.876: E/AndroidRuntime(5299):  at android.app.ActivityThread.access$600(ActivityThread.java:141) 
03-30 10:24:34.876: E/AndroidRuntime(5299):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1234) 
03-30 10:24:34.876: E/AndroidRuntime(5299):  at android.os.Handler.dispatchMessage(Handler.java:99) 
03-30 10:24:34.876: E/AndroidRuntime(5299):  at android.os.Looper.loop(Looper.java:137) 
03-30 10:24:34.876: E/AndroidRuntime(5299):  at android.app.ActivityThread.main(ActivityThread.java:5041) 
03-30 10:24:34.876: E/AndroidRuntime(5299):  at java.lang.reflect.Method.invokeNative(Native Method) 
03-30 10:24:34.876: E/AndroidRuntime(5299):  at java.lang.reflect.Method.invoke(Method.java:511) 
03-30 10:24:34.876: E/AndroidRuntime(5299):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793) 
03-30 10:24:34.876: E/AndroidRuntime(5299):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560) 
03-30 10:24:34.876: E/AndroidRuntime(5299):  at dalvik.system.NativeStart.main(Native Method) 
03-30 10:24:34.876: E/AndroidRuntime(5299): Caused by: java.lang.ClassCastException: com.example.lunetta.AboutFragment cannot be cast to android.app.Activity 
03-30 10:24:34.876: E/AndroidRuntime(5299):  at android.app.Instrumentation.newActivity(Instrumentation.java:1054) 
03-30 10:24:34.876: E/AndroidRuntime(5299):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2097) 
03-30 10:24:34.876: E/AndroidRuntime(5299):  ... 11 more 

ответ

1

Причина заключается в том, что фрагмент не является Мероприятия. Это часть Activity, которая использует почти тот же жизненный цикл, что и активность, но по крайней мере вы должны иметь активность, которая заменяет контейнер фрагментом.

Помните: Фрагменты используются по нескольким причинам. Во-первых, вы можете использовать в своей деятельности несколько фрагментов (макетов) и заменить их. Во-вторых, он может быть более гибким.

Вы могли бы сделать это таким образом, если вы хотите использовать фрагмент:

public void aboutUsClick(View view) { 
FragmentTransaction ft = getFragmentManager().beginTransaction(); 
Fragment prev = getFragmentManager().findFragmentByTag("dialog"); 
if (prev != null) { 
    ft.remove(prev); 
} 
ft.addToBackStack(null); 

// Create and show the dialog. 
DialogFragment newFragment = MyDialogFragment.newInstance(mStackLevel); 
newFragment.show(ft, "dialog"); 
} 

а класс фрагмент простирается DialogFragment.

Еще одна идея - создать класс, который загружает макет, который заменяет ваш фрагмент.

Для этого вам нужно будет создать новый формат, который может выглядеть следующим образом (от Andorid образцов разработчика)

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:orientation="horizontal" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent"> 

<fragment android:name="com.example.android.fragments.HeadlinesFragment" 
      android:id="@+id/headlines_fragment" 
      android:layout_weight="1" 
      android:layout_width="0dp" 
      android:layout_height="match_parent" /> 

<fragment android:name="com.example.android.fragments.ArticleFragment" 
      android:id="@+id/article_fragment" 
      android:layout_weight="2" 
      android:layout_width="0dp" 
      android:layout_height="match_parent" /> 

, а затем начать активность, которая загружает/содержит фрагмент.

public class MainActivity extends FragmentActivity { 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.news_articles); 

     // Check that the activity is using the layout version with 
     // the fragment_container FrameLayout 
     if (findViewById(R.id.fragment_container) != null) { 

      // However, if we're being restored from a previous state, 
      // then we don't need to do anything and should return or else 
      // we could end up with overlapping fragments. 
      if (savedInstanceState != null) { 
       return; 
      } 

      // Create a new Fragment to be placed in the activity layout 
      HeadlinesFragment firstFragment = new HeadlinesFragment(); 

      // In case this activity was started with special instructions from an 
      // Intent, pass the Intent's extras to the fragment as arguments 
      firstFragment.setArguments(getIntent().getExtras()); 

      // Add the fragment to the 'fragment_container' FrameLayout 
      getSupportFragmentManager().beginTransaction() 
        .add(R.id.fragment_container, firstFragment).commit(); 
     } 
    } 
} 
+0

На самом деле я не понимаю, как использовать диалог ... –

0

Это неправильно:

startActivity (новый Intent (это, AboutFragment.class));

Вы начинаете заниматься бизнесом, но AboutFragment.class - это фрагмент, но не его деятельность. Вы можете использовать replace для инициализации фрагмента.

0

Вы неправильно используете фрагмент. Фрагмент должен быть частью активности и не может быть запущен с использованием функции startActivity(). Вы должны либо

я) Добавить фрагмент в файл макета XML вашей деятельности или
II) Программным добавить его к деятельности

+0

если у вас есть пример с кодом, который добавляет Programmatically, пожалуйста, поделитесь мной ... –

+0

http://developer.android.com/guide/components/fragments.html Проверка добавления фрагмента в раздел активности – pvn

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