2012-12-10 4 views
18

Jestem nowicjuszem Mam problem tworzenia gry.java nie używając konstruktorów widoku 2- lub 3-argument; Atrybuty XML nie będzie działać

wykonać procesowi

activity_main.xml -> MainActivity.java -> -> action.xml GameLoop.java (błąd) -> CustomView .java

Custom view CustomView is not using the 2- or 3-argument View constructors; XML attributes will not work 

nie rozumiem ......

+0

nie edytować pytanie, bo to już rozwiązany .. raczej zakładać swoje rozwiązanie. –

+0

Nie sugeruj edycji innym odpowiedziom. Napisz własną odpowiedź. –

Odpowiedz

53

trzeba zastąpić pozostałe 2 konstruktorów widzenia w CustomView:

public CustomView(Context context) { 
    super(context); 
    init(context); 
} 

public CustomView(Context context, AttributeSet attrs) { 
    super(context, attrs); 
    init(context); 
} 

public CustomView(Context context, AttributeSet attrs, int defStyle) { 
    super(context, attrs, defStyle); 
    init(context); 
} 

private void init(Context context) { 
    //do stuff that was in your original constructor... 
} 
+0

zmienił ten kod action.xml error now.Study.androidproject.CustomView nie udało się utworzyć instancji. java.lang.StackOverflowError – xsxy

+0

Nie można utworzyć instancji następujących klas: - teraz.Study.androidproject.CustomView (klasa otwarta, Pokaż dziennik błędów) Zobacz dziennik błędów (Okno> Pokaż widok), aby uzyskać więcej szczegółów. Wskazówka: Użyj View.isInEditMode() w niestandardowych widokach, aby pominąć kod, gdy jest wyświetlany w Eclipse – xsxy

+0

err ... przepraszam Zostawiłem wywołanie init() w funkcji init, prawdopodobnie błąd przepełnienia stosu, poprawiony teraz –

10

Trzeba wdrożyć te konstruktorów również:

//Constructor that is called when inflating a view from XML. 
View(Context context, AttributeSet attrs) 

//Perform inflation from XML and apply a class-specific base style. 
View(Context context, AttributeSet attrs, int defStyle) 
1

myślę, że to zależy od tego jak możliwość tworzenia niestandardowego widoku i jak Zamierzasz używać go .
Nie wszystkie 3 konstruktory są naprawdę potrzebne.
Jeśli utworzyć widok z pliku xml atrybuty, ale nie użyje defstyle, jej wystarczy zadzwonić

public CustomView(Context context, AttributeSet attrs) { 
    this(context, attrs); 
    //Your code 
} 

jeśli nie używasz atrybutów i defstlye/widziałem przykłady to/Jesteś zadowolony zadzwonić tylko

public CustomView(Context context) { 
    super(context); 
    //Your code 
} 

a jeśli chcesz używać defstyle i atrybuty zbyt

public CustomView(Context context, AttributeSet attrs) { 
    this(context, attrs); 
    //Yourcode 
} 
Powiązane problemy