2016-05-28 6 views
3

私はアンドロイドを新しくしました。次のエラーが発生しています。私は同じ質問を見て、私のコードに回答を適用しました。しかし、私はまだ同じエラーが発生しています。フラグメント内のAndroid FATAL例外

5月28日09:30:12.800 2016から2016/com.example.yatisawhney.fragmentdemo E/AndroidRuntime:致命的な例外:メインプロセス:com.example.yatisawhney.fragmentdemo、PID:2016れるjava.lang。 RuntimeException:アクティビティを開始できませんComponentInfo {com.example.yatisawhney.fragmentdemo/com.example.yatisawhney.fragmentdemo.MainActivity}:android.view.InflateException:バイナリXMLファイル行#21:android.app.ActivityThread android.app.ActivityThread $ H.handleMessageでandroid.app.ActivityThread.access $ 800(ActivityThread.java:135)でandroid.app.ActivityThread.handleLaunchActivityで.performLaunchActivity(ActivityThread.java:2195)(ActivityThread.java:2245) (ActivityThread.java:1196)android.os.Handler.dispatchMessage(Handler.java:102)android.os.Looper.loop(Looper.java:136)android.app.Activit yThread.main(ActivityThread.java:5017)at java.lang.reflect.Method.invokeNative(ネイティブメソッド)java.lang.reflect.Method.invoke(Method.java:515)at com.android.internal.os。 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)at dalvik.system.NativeStart.main(ネイティブメソッド)原因:android.view。 InflateException:バイナリXMLファイルライン#21:android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:714)android.view.LayoutInflater.rInflate(LayoutInflater.java:756)android.view.LayoutInflaterのクラスフラグメントを拡張していません。 android.support.v7.app.AppCompatDelegateImplV7.setContentViewのandroid.view.LayoutInflater.inflate(LayoutInflater.java:353)のandroid.view.LayoutInflater.inflate(LayoutInflater.java:492)のinflate(LayoutInflater.java:492) (AppCompatDelegateImplV7.java:276)android.support.v7.app.AppCompatActivity.setContentView(AppCompatActivity.java:136)com.example.yatisawhney.fragmentdemo.M android.app.ActivityThread.performLaunchActivityでandroid.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)でandroid.app.Activity.performCreate(Activity.java:5231)でainActivity.onCreate(MainActivity.java:13)(ActivityThread .java:2159)android.app.ActivityThread $ H.handleMessage(ActivityThread.java):アンドロイド。 :1196)android.os.Handler.dispatchMessage(Handler.java:102)android.os.Looper.loop(Looper.java:136)android.app.ActivityThread.main(ActivityThread.java:5017)at java .lang.reflect.Method.invokeNative(ネイティブメソッド)(java.lang.reflect.Method.invoke(Method.java:515)at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:779) dalvik.system.NativeStart.main(ネイティブメソッド)のcom.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)で発生する:java.lang.IllegalStateException:Fragment com.exampl e.yatisawhney.fragmentdemo.BottomFragmentはビューを作成しませんでした。 android.support.v4.app.FragmentManagerImpl.onCreateView(FragmentManager.java:2319)android.support.v4.app.FragmentController.onCreateView(FragmentController.java:120)android.support.v4.app.FragmentActivity.dispatchFragmentsOnCreateView android.viewでandroid.support.v4.app.FragmentActivity.onCreateView(FragmentActivity.java:80)でandroid.support.v4.app.BaseFragmentActivityHoneycomb.onCreateView(BaseFragmentActivityHoneycomb.java:31)で(FragmentActivity.java:357)。 android.view.LayoutInflater.inflateでandroid.view.LayoutInflater.inflate(LayoutInflater.java:492)でandroid.view.LayoutInflater.rInflate(LayoutInflater.java:756)でLayoutInflater.createViewFromTag(LayoutInflater.java:690)(LayoutInflater .java:397)android.support.v7.app.AppCompatActivityでandroid.support.v7.app.AppCompatDelegateImplV7.setContentViewでandroid.view.LayoutInflater.inflate(LayoutInflater.java:353)(AppCompatDelegateImplV7.java:276)で。 com.example.yatisのsetContentView(AppCompatActivity.java:136) android.app.ActivityThreadのandroid.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)のandroid.app.Activity.performCreate(Activity.java:5231)のawhney.fragmentdemo.MainActivity.onCreate(MainActivity.java:13) android.app.ActivityThread $ H.handleMessageでandroid.app.ActivityThread.access $ 800(ActivityThread.java:135)でandroid.app.ActivityThread.handleLaunchActivityで.performLaunchActivity(ActivityThread.java:2159)(ActivityThread.java:2245) (ActivityThread.java:1196)android.os.Handler.dispatchMessage(Handler.java:102)android.os.Looper.loop(Looper.java:136)android.app.ActivityThread.main(ActivityThread。java:5017)at java.lang.reflect.Method.invokeNative(ネイティブメソッド)java.lang.reflect.Method.invoke(Method.java:515)at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(次dalvik.system.NativeStart.main(ネイティブメソッド)


でcom.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)でZygoteInit.java:779は)私のしていますjavaの3つのファイル

MainActivity.java

package com.example.yatisawhney.fragmentdemo; 

import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 

public class MainActivity extends AppCompatActivity implements TopFragment.ActivityCommunicator { 

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

    @Override 
    public void changeText(String a, String b) { 
     BottomFragment bf = (BottomFragment)getSupportFragmentManager().findFragmentById(R.id.fragment2); 
     bf.setMeme(a,b); 
    } 
} 

ボトム断片

package com.example.yatisawhney.fragmentdemo; 

import android.os.Bundle; 
import android.support.annotation.Nullable; 
import android.support.v4.app.Fragment; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.TextView; 

/** 
* Created by yatisawhney on 28/05/16. 
*/ 
public class BottomFragment extends Fragment { 
    private static TextView top ; 
    private static TextView bottom; 

    @Nullable 
    @Override 
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { 
     View bottom = inflater.inflate(R.layout.bottom_section ,container, false); 

     top = (TextView)bottom.findViewById(R.id.textView); 
     bottom=(TextView)bottom.findViewById(R.id.textView2); 

     return bottom; 
    } 

    public void setMeme(String a , String b){ 
     top.setText(a); 
     bottom.setText(b); 
    } 
} 

トップ断片

package com.example.yatisawhney.fragmentdemo; 

import android.app.Activity; 
import android.os.Bundle; 
import android.support.annotation.Nullable; 
import android.support.v4.app.Fragment; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.Button; 
import android.widget.EditText; 

/** 
* Created by yatisawhney on 28/05/16. 
*/ 
public class TopFragment extends Fragment{ 

    private static EditText top; 
    private static EditText bottom; 

    ActivityCommunicator communicator; 


    public interface ActivityCommunicator{ 
     public void changeText(String a , String b); 
    } 

    private void changeText(){ 
     communicator.changeText(top.getText().toString() , bottom.getText().toString()); 
    } 

    @Override 
    public void onAttach(Activity activity) { 
     super.onAttach(activity); 
     try { 
      communicator = (ActivityCommunicator) activity; 
     }catch(Exception e){ 
      e.printStackTrace(); 
     } 
    } 

    @Nullable 
    @Override 
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { 
     View top_view = inflater.inflate(R.layout.top_section , container , false); 

     top=(EditText)top_view.findViewById(R.id.yates_text); 
     bottom=(EditText)top_view.findViewById(R.id.yates_another_text); 
     Button button = (Button)top_view.findViewById(R.id.yates_button); 
     button.setOnClickListener(
       new View.OnClickListener() { 
        @Override 
        public void onClick(View v) { 
         changeText(); 
        } 
       } 
     ); 

     return top_view; 
    } 
} 

activity_main.xml

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:paddingBottom="@dimen/activity_vertical_margin" 
    android:paddingLeft="@dimen/activity_horizontal_margin" 
    android:paddingRight="@dimen/activity_horizontal_margin" 
    android:paddingTop="@dimen/activity_vertical_margin" 
    tools:context="com.example.yatisawhney.fragmentdemo.MainActivity"> 

    <fragment 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:name="com.example.yatisawhney.fragmentdemo.TopFragment" 
     android:id="@+id/fragment" 
     android:layout_alignParentTop="true" 
     android:layout_centerHorizontal="true" 
     tools:layout="@layout/top_section" /> 

    <fragment 
     android:layout_width="300dp" 
     android:layout_height="300dp" 
     android:name="com.example.yatisawhney.fragmentdemo.BottomFragment" 
     android:id="@+id/fragment2" 
     tools:layout="@layout/bottom_section" 
     android:layout_alignParentBottom="true" 
     android:layout_centerHorizontal="true" /> 

</RelativeLayout> 

答えて

1

最後に、私は私の質問への答えを得ました。

onclauseライフサイクルの作成は、アクティビティライフサイクルのonCreate中に呼び出すことができます。しかし、これはすべての場合ではない

したがって、フラグメントのビューにアクセスしたい場合は、onActivityCreated()メソッドの内部で行うほうが安全です。これにより、アクティビティが作成され、ビュー階層がメモリにロードされたことを確認できます。 :)

関連する問題