Frage

Ich habe einen Android -Homescreen entwickelt, der Code scheint richtig zu sein, aber wenn ich das Projekt ausführe, erhalte ich den folgenden Fehler:

java.lang.RuntimeException:
Unable to instantiate activity ComponentInfo{com.matthieu.launcher/
com.matthieu.launcher.DragableSpace}:
java.lang.InstantiationException: com.matthieu.launcher.DragableSpace

Hier ist das vollständige Protokoll: http://pastebin.com/iytyw2w6

Der Code stammt direkt vom Android -Launcher.

DragableSpace: http://pastebin.com/jpwdtfpf

Hauptaktivität:

public class MainActivity extends Activity {
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        DragableSpace space = new DragableSpace(this.getApplicationContext());
        setContentView(space);
    }
}

Attr.xml im Werteordner:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <declare-styleable name="DragableSpace">
        <attr name="default_screen" format="integer"/>
    </declare-styleable>
</resources>

Drei XML -Dateien Einstiegsbild, links_screen und Right_Screen, alle haben den gleichen Code, abgesehen von der ID:

<LinearLayout android:id="@+id/center"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical">
</LinearLayout>

Manifest:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
      package="com.matthieu.launcher"
      android:versionCode="1"
      android:versionName="1.0">
    <application android:icon="@drawable/icon" android:label="@string/app_name">
        <activity android:name=".MainActivity"
                  android:label="@string/app_name">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>
</manifest> 

Irgendwelche Ideen, wie man das behebt?

War es hilfreich?

Lösung

Wir hatten einen kurzen Blick auf den Code wie jetzt. NullPointerexception in Zeile 169 von DragableSpace, da keine untergeordnete Ansicht ist - Beheben Sie dies, indem Sie eine untergeordnete Ansicht in der MainActivity hinzufügen:

TextView child = new TextView(this);        
    child.setText("This is a Test");
    space.addView(child);

Jetzt läuft und protokolliert der Code die Touch -Ereignisse in Logcat, aber es scheint nichts zu passieren (ich vermute, Sie möchten 3 Räume, die auf dem Bildschirm gezogen und neu positioniert werden können) - einige anfängliche Probleme, denke ich, der Wert von Snap_velocity von 1000 scheint Ein bisschen hoch für mich für einige schleppende Gesten scheint keines der Layout -XML -Dateien verwendet zu werden, und wenn der aktuelle "Bildschirm" die volle Breite und Höhe des Geräts ist, wohin wird er gezogen?

Aktualisiert: Fügen Sie das XML -Layout des vorherigen Beitrags als main.xml hinzu:

<?xml version="1.0" encoding="utf-8"?>

Stellen Sie jetzt in der Mainaktivität den Inhalt als:

setContentView(R.layout.main);

Um es einfacher zu machen, zu sehen, was passiert, stelle ich die Hintergrundfarben auf verschiedene Farben ein. Fügen Sie der Datei strings.xml die folgenden Farben hinzu:

<color name="green">#21d081</color>
<color name="blue">#00A0FF</color>
<color name="orange">#EA6700</color>

Bearbeiten Sie die XML -Dateien im Bildschirm XML, um ein Farb -EG in der Datei links_screen.xml hinzuzufügen, und fügen Sie das folgende Attribut hinzu:

android:background="@color/blue"

Verwenden Sie eine andere Farbe für die initial_screen.xml und die right_screen.xml. Wenn Sie das Projekt ausführen, können Sie über den Bildschirm ziehen und einen neuen Bereich angeben.

alt text

Andere Tipps

Nebenbei bemerkt, und dies ist eher eine Beobachtung. In Ihrem DragableSpace -Code habe ich zwei Dinge bemerkt.

  1. In public DragableSpace (Kontextkontext, Attributeet attrs) {... Sie haben A.Recycle () nicht angerufen; Nach dem Zugriff auf alle Ihre Eigenschaften von erhaltenstyledattributes. Das ist schlecht, denke ich.

  2. Ich bin mir nicht ganz sicher, wie ich gerade Java abgeholt habe, aber ich stellte fest, dass ich Super.DragableSpace (...) zu diesem DRAGABLEPACE (...) ändern musste. Dies hätte für meine Komponente nur besonders gewesen sein können, war sich jedoch nicht ganz sicher, ob das richtig war oder nicht.

DragableSpace ist ein ViewGroup. DragableSpace ist nicht ein Activity. Homerisen sind Aktivitäten. Somit, DragableSpace Kann kein Startbildschirm sein.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top