2016-07-31 3 views
1

Ich habe zwei Aktivitäten A und B, und ein nicht Aktivitätsklasse C.Arbeiten mit einer nicht-Aktivitätsklasse, das in der Lage sein sollte, die Instanzvariable der anrufenden Aktivität

Zur Verwendung die Methoden von C zu handhaben, Ich erstelle eine Instanz c von C aus der aktuell laufenden Aktivität (zB A steht im Vordergrund und A hat C erzeugt).

Nun möchte ich die Instanzvariablen der Aktivität A von c verwenden. Was soll ich machen?

Ich versuche, die Nicht-Aktivität C-Klasse für mehrere Aktivitäten zu verwenden. Bitte hilf mir! Ich habe viel recherchiert, konnte aber nichts Nützliches finden. :(

Dies ist der Beispielcode:

ActivityOne.java:

package com.example.vaibhav.a21matchsticks; 
import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 

public class Example extends AppCompatActivity { 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    } 

// Now comes the method, I want to use in the non-activity java class. 

public void buttonClick(View view) { 
    EditText editText = (EditText) findViewById(R.id.editMe); //finds the view from the activity 
    int i = Integer.parseInt(editText.getText().toString()); 

    //Below code changes the view state, if the condition is true 

    if(i<4) { 
     findViewById(R.id.button).setEnabled(false); 
    } 

} 

die XML-Datei Angenommen, ein lineares Layout mit einem EditText Blick haben (mit id 'EDITME') und einem Knopf (mit ID 'button'.) Es gibt mehr als 1 Aktivitäten wie diese, die jeweils mindestens die beiden oben genannten Ansichten haben (und möglicherweise mehr).

Meine Aufgabe ist es, eine Nicht-Aktivitätsklasse C zu erstellen, die behandelt bedingte Aussage für verschiedene Aktivitäten und ändern das jeweilige Layout entsprechend ngly.

+0

Dies ist sehr vage. Was soll Klasse C genau tun? Wenn Sie nur eine Methode für Ihre Aktivitätsklasse von woanders aufrufen müssen, können Sie eine Instanz davon übergeben. Wenn Sie jedoch nicht vorsichtig sind, kann der Aktivitätslebenszyklus einige Fehler in diesen Plan einbringen. – solarshado

+0

@solarshadow natürlich tut die C-Klasse in dieser Frage nichts nützliches. Es sollte ein Beispiel für meine Frage sein. In meinem ursprünglichen Code habe ich 3 Aktivitäten. Jede dieser Aktivitäten verwendet den gleichen Code zum Ausführen eines Satzes von Anweisungen. Also beschloss ich, sie alle in eine Nicht-Aktivitätsklasse zu setzen, um einige Zeilen zu sparen. Aber dann erkannte ich, dass der Code, den ich in diese Klasse schreiben werde, sich auf einige Ansichten der aufrufenden Aktivität beziehen wird. – vaibhavS

+0

Je nachdem, was Sie gerade tun, könnten Sie C als Oberklasse Ihrer anderen Aktivitätsklassen erstellen. Wenn Sie setContentView() überschreiben, können Sie nach dem Aufruf der Super-Implementierung die benötigten Ansichten abrufen. – solarshado

Antwort

0

Obwohl eine aber vage, scheint Ihre Klasse C eine Helferklasse zu sein. Da Sie nun auf Instanzvariablen (und möglicherweise andere Informationen) in Ihrer C-Klasse zugreifen möchten, müssen Sie sie manuell übergeben. Abhängig davon, was Sie übergeben, kann es der Klasse C entweder im Konstruktor oder über Instanzenmethoden der Klasse C selbst bereitgestellt werden.

Für zB: auf der Grundlage der letzten Aussage Ihrer Frage können Sie einen ViewGroup Verweis von Ihrer Tätigkeit der Klasse C über so etwas wie dies passieren:

public void initLayout(ViewGroup parent) { 

    // Hide/unhide/perform actions/etc based on current activity needs 

} 

Und Sie auch einen enum Wert auf Klasse passieren können C, um zwischen Ihren Aktivitäten in Klasse C zu unterscheiden. Für eine Kommunikation von Klasse C zu Aktivität können Sie interface in Java anzeigen. Hoffe das hilft.

+0

Ihre Antwort mag für einige Leute funktionieren, aber für mich wird es zu mühsam sein, jede der Ansichten von allen drei meiner Aktivitäten manuell zu übergeben. Vielen Dank! – vaibhavS

+0

@vaibhavS Hmm ... vielleicht ist das die einzige Möglichkeit, auf Variablen aus anderen Klassen zuzugreifen. Da Sie jedoch mehrere Ansichten erwähnt haben, können Sie sie über Instanzmethoden oder den Konstruktor der Klasse C als ein Array von Ansichten übergeben. Ich säe gerade. – Shaishav

Verwandte Themen