2013-03-30 6 views
8

Ich weiß, ähnliche Fragen wie diese wurden beantwortet, aber ich habe getan, was das Tutorial vorgeschlagen und lesen von anderen Posts, aber immer noch ich den Inflator Error. Nicht sicher, was ich falsch mache. Bitte überprüfen Sie den Code. Danke vielmals.android.view.InflateException: Binäre XML-Dateizeile # 7: Fehler beim Aufblasen des Klassenfragments

Edit: Ich habe zwei Fragmente in einer Aktivität. Ich habe eine Schaltfläche in einem Fragment und eine Textansicht in der anderen. Ich versuche zu verstehen, wie Fragmente funktionieren, also habe ich diesen Code nach dem Lesen der Dokumentation selbst erstellt. Wenn die Schaltfläche in einem Fragment ausgelöst wird, sendet sie einen Wert an das andere Fragment in der Aktivität. Ich bin nicht in der Lage, das Fragment zu erhalten

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); 
      } 
     } 
aufzublasen

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> 

I pre-Wabe-Versionen zu unterstützen versuchen und Ich denke ich importiere al l die Unterstützungsbibliotheken.

+1

Code herum werfen wird wahrscheinlich nicht jemanden dazu ermutigen, Ihnen zu helfen. Einige grundlegende Details wären großartig. – WarrenFaith

+0

@WarrenFaith - Ich habe einige Details über den Code hinzugefügt. Das tut mir leid. Ich war in Eile. Vielen Dank. – Guru

+0

Sie brauchen keine der Superaufrufe in Ihren Fragmenten über die Fahrt von onCreateView; gib einfach deine Ansicht zurück. – wkhatch

Antwort

0

Versuchen Sie das Fragment in Ihrem xml mit android.support.v4.app.Fragment

EDIT ersetzt: Versuchen Sie auch Super rufen, wenn Sie nur einmal mit dem Blick in onCreateView d.h fertig sind. Entfernen Sie den Anruf an den Super am Anfang und sehen, ob das hilft

+0

Ich habe das versucht, hat nicht funktioniert. – Guru

+0

hast du versucht, deinen Anruf zu Super zu entfernen? seit du es zweimal anrufst. Kannst du den Logcat posten? –

+0

Eigentlich habe ich meine Arbeit neu gemacht und es begann zu arbeiten, ich glaube, es könnte der Name im Fragment in der XML (Android: Name) Ich änderte es in Klasse = "Name der Fragmentklasse" aber ich hatte das einmal getan vorher, dass es nicht funktioniert hat. Nicht sicher, warum der obige Code nicht funktioniert hat. trotzdem danke für deine Hilfe. – Guru

1

In den OnCreateView Callbacks müssen Sie die Ansicht, die Sie aufgeblasen. Auf diese Weise weiß das System, welche Ansicht gezeichnet werden soll. Andernfalls, wenn Sie super.onCreateView (...) auf diese Weise zurückgeben, wird keine Benutzeroberfläche angezeigt.

Try this:

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; 
    } 

Ändern der Rückgabewert des anderen Fragment entsprechend.

+0

Ich merke gerade, dass dieser alt ist und einen Kommentar von whatch mit der richtigen Lösung hat. –

3

Ihre Import-Anweisung löschen:

import android.support.v4.app.FragmentActivity; 

und Import wieder mit dem Pop-up-Import Vorschlag. Ich weiß nicht warum, aber es funktioniert immer für mich.

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

Um den Fehler zu beheben:

In Manifest:

<application 
     android:largeHeap="true" 

In .xml-Datei, können Sie den folgenden Code entfernen müssen:

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

Da der Fehler out von Speicherfehler

0

ändern Sie Ihre Layout Widget ID, es funktioniert für mich.

Verwandte Themen