API 8, Fragment testen mit Support-Library

  • 5 Antworten
  • Letztes Antwortdatum
W

Wicki12

Ambitioniertes Mitglied
0
Hallo,

Unter API 16 läuft die App. Ich möchte aber auch unter API 8 arbeiten
und dabei Fragmente nutzen. Dazu habe ich Androids Support-Library
'android-support-v4.jar' in das Projekt eingebunden.
Die App wird erfolgreich geladen doch stürzt dann ab mit den nachfolgenden
Meldungen (Ausschnitte):

02-11 16:44:41.989: E/AndroidRuntime(319):
Caused by: android.view.InflateException: Binary XML file line #14: Error inflating class fragment


02-11 16:44:41.989: E/AndroidRuntime(319):
at com.thomaskuenneth.fragmentdemo.FragmentDemo.onCreate(FragmentDemo.java:12)
****** Anweisung ******: setContentView(R.layout.main);


02-11 16:44:41.989: E/AndroidRuntime(319): Caused by: java.lang.ClassNotFoundException:
android.view.fragment in loader dalvik.system.PathClassLoader[/data/app/com.thomaskuenneth.fragmentdemo-2.apk]

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

    <TextView
        android:id="@+id/textview"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        />
        
    <fragment
        android:id="@+id/fragment"
        android:name="com.thomaskuenneth.fragmentdemo.TestFragment"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        />
</LinearLayout>

<!-- fragment_layout.xml -->
<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
/>

package com.thomaskuenneth.fragmentdemo;

import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;

public class FragmentDemo extends Activity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        TextView tv = (TextView) findViewById(R.id.textview);
        tv.setText(getString(R.string.text2));
    }
}

package com.thomaskuenneth.fragmentdemo;
import android.app.Fragment; //ggf. android.support.v4.app.Fragment
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;

public class TestFragment extends Fragment {

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        return inflater.inflate(R.layout.fragment_layout, container, false);
    }

    @Override
    public void onStart() {
        super.onStart();
        TextView tv = (TextView) getView();
        tv.setText(getString(R.string.text1));
    }
}
Kann mir jemand helfen ?
Woher kommt android.view.fragment aus der Fehlermeldung ?

Gruss Wicki
 
Die Fehlermeldung sagt aus dass die Fragment Klasse nicht gefunden wird weil es diese in API8 nicht gibt. Du musst schon die v4.Fragment Klasse importen damit es in API8-10 geht.

Gesendet von meinem GT-I9000 mit Tapatalk 2
 
Dank für den Hinweis, aber das habe ich inzwischen gemacht (siehe mein Kommentarhinweis in der import-Anweisung), also:
Code:
import android.support.v4.app.Fragment;
leider ohne Erfolg.
Auch der Versuch mit
Code:
public class FragmentDemo extends FragmentActivity {
brachte den gleichen Fehler.
 
Im XML musst du sie aber auch noch benutzen ;)

Gesendet von meinem Nexus 4 mit Tapatalk 2
 
Im XML musst du sie aber auch noch benutzen
Kannst Du mir das genauer erklären ?

Nach der Änderung
Code:
public class FragmentDemo extends FragmentActivity {
in der Klasse "FragmentDemo" kommt nun ein anderer Fehler:
02-12 08:39:52.810: ERROR/AndroidRuntime(392): Caused by: java.lang.ClassCastException: android.support.v4.app.NoSaveStateFrameLayout
02-12 08:39:52.810: ERROR/AndroidRuntime(392): at com.thomaskuenneth.fragmentdemo.TestFragment.onStart(TestFragment.java:23)
Das ist in "TestFragment" die "TextView"-Anweisung.
Hoffe auf Hinweise.


Gruss Wicki
 
Inzwischen habe ich eine Lösung gefunden. Also die "FragmentDemo" sieht so aus:
Code:
import android.os.Bundle;
import android.support.v4.app.FragmentActivity;
import android.widget.TextView;

public class FragmentDemo extends FragmentActivity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        TextView tv = (TextView) findViewById(R.id.textview);
        tv.setText(getString(R.string.text2));
    }
}
und die Klasse "TestFragment" mit "fragment_layout.xml" so
Code:
<!-- fragment_layout.xml -->
<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/textviewfr"
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
/>

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

public class TestFragment extends Fragment {

    boolean supportV4 = true;
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        return inflater.inflate(R.layout.fragment_layout, container, false);
    }
    @Override
    public void onStart() {
        super.onStart();
        TextView tv;
        if (supportV4) {
          FragmentActivity fa = getActivity();
          tv = (TextView)fa.findViewById(R.id.textviewfr);
        } else
          tv = (TextView) getView();
        tv.setText(getString(R.string.text1));
    }
}
Nochmals Dank für die Hinweise.

Gruss Wicki
 

Ähnliche Themen

4
Antworten
10
Aufrufe
1.092
jogimuc
J
M
Antworten
21
Aufrufe
1.407
swa00
swa00
Mr-Fisch
Antworten
0
Aufrufe
528
Mr-Fisch
Mr-Fisch
Mr-Fisch
Antworten
8
Aufrufe
1.030
Mr-Fisch
Mr-Fisch
migi01
Antworten
26
Aufrufe
2.048
migi01
migi01
Zurück
Oben Unten