2013-03-30 15 views
8

このような質問がありましたが、このチュートリアルで提案した内容を読んでいるようですが、まだインフレータを取得していますエラー。私が間違っていることを確認していない。コードを確認してください。どうもありがとう。android.view.InflateException:バイナリXMLファイルの行#7:クラスの断片化をエラーするエラー

編集:アクティビティに2つの断片があります。 1つの断片にボタンがあり、もう片方にテキストビューがあります。フラグメントの仕組みを理解しようとしているので、ドキュメントを読んだ後にこのコードを自分で作成しました。ボタンが1つのフラグメントでトリガーされると、アクティビティーの他のフラグメントに値が送信されます。私は

MainActivity.java

 import com.transport.mbtalocpro.PredictedTimeFragment.ButtonClickListener; 
     import android.os.Bundle; 
     import android.support.v4.app.FragmentActivity; 


     public class MainActivity extends FragmentActivity implements ButtonClickListener { 

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


      @Override 
      public void sendCounter(int count) { 
       TestFrag testF = (TestFrag) getSupportFragmentManager().findFragmentById(R.id.bottomHalf); 
       if(testF != null) testF.setCounter(String.valueOf(count)); 

      } 

     } 

PredictedTimeFragment.java

  import android.app.Activity; 
      import android.os.Bundle; 
      import android.support.v4.app.Fragment; 
      import android.view.InflateException; 
      import android.view.LayoutInflater; 
      import android.view.View; 
      import android.view.View.OnClickListener; 
      import android.view.ViewGroup; 
      import android.widget.Button; 

      public class PredictedTimeFragment extends Fragment { 


      ButtonClickListener bListener; 

      public interface ButtonClickListener { 
       public void sendCounter(int count); 
      } 

      public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
       super.onCreateView(inflater, container, savedInstanceState); 
       try { 
        View view = inflater.inflate(R.layout.prediction_time, container, false); 
        Button button = (Button) view.findViewById(R.id.test); 
        button.setOnClickListener(new OnClickListener() { 

         @Override 
         public void onClick(View v) { 
          test(v); 

         } 
        }); 
       } catch(InflateException e) { 
        e.printStackTrace(); 
        System.out.println("Predicted Time Fragment"); 
       } 
       return super.onCreateView(inflater, container, savedInstanceState); 
      } 

      public void onAttach(Activity activity) { 
        super.onAttach(activity); 
        try { 
        bListener = (ButtonClickListener) activity; 
        } catch (ClassCastException e) { 
        System.out.println("must implemenet Listener"); 
        } 
       } 


      public void test(View view) { 
       bListener.sendCounter(23); 
      } 

     } 

TestFrag.java

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

     public class TestFrag extends Fragment { 

      @Override 
      public View onCreateView(LayoutInflater inflator, ViewGroup container, Bundle savedInstanceState) { 
       super.onCreateView(inflator, container, savedInstanceState); 
       try { 
        View view = inflator.inflate(R.layout.test_frag, container, false); 
       } catch(InflateException e) { 
        e.printStackTrace(); 
        System.out.println("Test Fragment"); 
       } 
       return super.onCreateView(inflator, container, savedInstanceState); 
      } 

      public void setCounter(String textS) { 
       TextView text = (TextView) getView().findViewById(R.id.test1); 
       text.setText((String) textS); 
      } 
     } 
を膨らませるための断片を取得することはできませんよ

activity_main.xml

 <?xml version="1.0" encoding="utf-8"?> 
     <LinearLayout 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:orientation="vertical"> 

      <fragment 
       android:id="@+id/topHalf" 
       android:layout_width="fill_parent" 
       android:layout_height="0dp" 
       android:layout_weight="0.5" 
       android:name="com.transport.mbtalocpro.PredictedTimeFragment"/> 

      <fragment 
       android:id="@+id/bottomHalf"   
       android:layout_width="fill_parent"   
       android:layout_height="0dp" 
       android:layout_weight="0.5" 
       android:name ="com.transport.mbtalocpro.TestFrag"/> 

     </LinearLayout> 

predicted_time.xml

 <?xml version="1.0" encoding="utf-8"?> 
     <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:orientation="vertical" > 

      <Button 
       android:id="@+id/test" 
       android:text="Test" 
       android:layout_width="fill_parent" 
       android:layout_height="30dp" 
       /> 

     </LinearLayout> 

test_frag.xml私も前ハニーコームバージョンをサポートしようとしています

 <?xml version="1.0" encoding="utf-8"?> 
     <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:orientation="vertical" > 

      <TextView 
       android:id="@+id/test1" 
       android:layout_width="fill_parent" 
       android:layout_height="40dp"/> 

     </LinearLayout> 

と私はalをインポートしていると思うlサポートライブラリ。

+1

周囲にコードを投げていると、誰かがあなたを助けてくれることはおそらくありません。いくつかの基本的な詳細はすばらしいでしょう。 – WarrenFaith

+0

@WarrenFaith - コードの詳細をいくつか追加しました。申し訳ありません。私は急いでいた。ありがとう。 – Guru

+0

onCreateViewを乗り越えてあなたのフラグメントにスーパーコールをする必要はありません。ただあなたの意見を返す。 – wkhatch

答えて

0

はandroid.support.v4.app.Fragment

EDITを使用してXMLでフラグメントを交換してみてください。また、あなたは一度だけonCreateViewであなたの意見すなわちで行われたときにスーパー呼び出そう。最初にsuperへの呼び出しを取り除き、それが役に立つかどうか確認してください。

+0

私はこれを試して、うまくいきませんでした。 – Guru

+0

スーパーへのコールを削除しようとしましたか?あなたはそれを二度呼び出すからです。あなたはlogcatを投稿できますか? –

+0

実際に私は自分の仕事をredidし、それが動作するようになった、私はそれがxml(android:name)のフラグメントの名前である可能性があると信じているクラス= "フラグメントクラスの名前" に変更しました。前に、それは働いていなかった。上記のコードがうまくいかなかった理由は不明です。とにかく助けてくれてありがとう。 – Guru

1

onCreateViewコールバックでは、ビューを返す必要があります。このようにして、システムは描画するビューを認識します。それ以外の場合、super.onCreateView(...)をこのように返すだけでUIは表示されません。したがって

public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 
     super.onCreateView(inflater, container, savedInstanceState); 
     try { 
      View view = inflater.inflate(R.layout.prediction_time, container, false); 
      Button button = (Button) view.findViewById(R.id.test); 
      button.setOnClickListener(new OnClickListener() { 

       @Override 
       public void onClick(View v) { 
        test(v); 

       } 
      }); 
     } catch(InflateException e) { 
      e.printStackTrace(); 
      System.out.println("Predicted Time Fragment"); 
     } 
     return view; 
    } 

の変更、他の断片の戻り値:

が、このお試しください。ポップアップ輸入の提案で再び

import android.support.v4.app.FragmentActivity; 

およびインポート:

+0

これは古いものであり、適切な解決策を持つwkhatchのコメントがあります。 –

3

は、あなたのimport文を削除します。私は理由を知らないが、それはいつも私のために働く。

import android.support.v4.app.FragmentActivity; 
1

エラーを修正するには、次のマニフェストに

:エラーが出ているので

android:src="@drawable.. 
android:background="@drawable... 

:の.xmlファイルで

<application 
     android:largeHeap="true" 

を、あなたは以下のコードを削除する必要がありますメモリエラーの

0

あなたの変更レイアウトウィジェットのID、それは私のために働く。

関連する問題