Aufruf von Methoden in anderer Activity

H

Hermi

Neues Mitglied
0
Hallo zusammen,

ich hab dieses Thema jetzt mal in einen eigenen Thread gepackt, da es doch etwas in die Java-Grundlagen geht.

Zur Vorgeschichte:
ich hab ein Tab-Layout das im main so bedient wird:
Code:
    public void onCreate(Bundle savedInstanceState) { 
        super.onCreate(savedInstanceState); 
        setContentView(R.layout.main); 
 
        TabHost tabHost = getTabHost(); 
 
        // Tab1 
        TabSpec tab1 = tabHost.newTabSpec("Tab1"); 
        // setting Title and Icon for the Tab 
        tab1.setIndicator(getResources().getString(R.string.tabStatus), getResources().getDrawable(R.drawable.ic_launcher)); 
        Intent tab1Intent = new Intent(this, Status.class); 
        tab1.setContent(tab1Intent); 
 
        // Tab2 
        TabSpec tab2 = tabHost.newTabSpec("Tab2"); 
        tab2.setIndicator(getResources().getString(R.string.tabLayout), getResources().getDrawable(R.drawable.ic_launcher)); 
        Intent tab2Intent = new Intent(this, Layout.class); 
        tab2.setContent(tab2Intent); 
 
        // Tab3 
        TabSpec tab3 = tabHost.newTabSpec("Tab3"); 
        tab3.setIndicator(getResources().getString(R.string.tabFunktion), getResources().getDrawable(R.drawable.ic_launcher)); 
        Intent tab3Intent = new Intent(this, Funktion.class); 
        tab3.setContent(tab3Intent); 
        // Tab6 
        TabSpec tab6 = tabHost.newTabSpec("Tab6"); 
        tab6.setIndicator(getResources().getString(R.string.tabCode), getResources().getDrawable(R.drawable.ic_launcher)); 
        Intent tab6Intent = new Intent(this, Code.class); 
        tab6.setContent(tab6Intent); 
 
        // Tab9 
        TabSpec tab9 = tabHost.newTabSpec("Tab9"); 
        tab9.setIndicator(getResources().getString(R.string.tabService), getResources().getDrawable(R.drawable.ic_launcher)); 
        Intent tab9Intent = new Intent(this, Service.class); 
        tab9.setContent(tab9Intent); 
        // Adding all TabSpec to TabHost 
        tabHost.addTab(tab1);
        tabHost.addTab(tab2);
        tabHost.addTab(tab3);
        tabHost.addTab(tab6);
        tabHost.addTab(tab9);

Somit wird für jeden Tab eine eigene Activity erzeugt, die dann z.B. so aussieht:
Code:
public class Code extends Activity {
 private static String TAG = "Code";
 
 boolean geklickt = false;
 
 
    public void onCreate(Bundle savedInstanceState) { 
        super.onCreate(savedInstanceState); 
        setContentView(R.layout.code);
 
        Button test = (Button) findViewById(R.id.button1);
        final ImageView led1 = (ImageView) findViewById(R.id.imageView1);
 
        test.setOnLongClickListener( new OnLongClickListener()  {
   @Override
   public boolean onLongClick(View v) {
          Log.d(TAG, "onLongClick: " + String.valueOf( v )); 
          geklickt = true;
          led1.setImageResource(R.drawable.btn_radio_blu_on);
    return false;
   }
 
        });

Jetzt will ich aus der einen Activity eine Metode aus einer anderen nutzen, da ich beim Drücken eines Knopfes auf einem anderen Tab den Inhalt ändern möchte.
Das geht alles gut, wenn ich die Methode als static definiere, jedoch lassen sich dann keine Systemmethoden wie z.B. findViewById nutzen, da dann die Fehlermeldung
Code:
 [SIZE=1]Cannot make a static reference to the non-static method findViewById(int) from the type Activity[/SIZE]
kommt.

Wie macht ihr das?

Der ursprüngliche Beitrag von 07:14 Uhr wurde um 07:15 Uhr ergänzt:

Wenn ich jetzt noch den Thematitel richtig geschrieben hätte.... :angry::angry::blink:
 
was willst du denn da genau ändern? Also im Grunde genommen durchlaufen die Activitys gewissen Lebenszyklen, also könntest du gewissen anpassungen auch in der onResume() Methode der jeweils gewünschten Klasse machen.Ich hatte mal ein ähnliches Problem. Dabei ging es darum das ich einen AlertDialog selbst als innerclass erzeugen musste und aus diesem dann meine Liste aktualisieren musste, bzw der app sagen musste das sich eben was in der Liste geändert hat. Da war bei mir das Stichwort notifyDataSetChanged().Am besten wäre es halt wenn du uns sagen könntest was du genau bezwecken willst etc.Weil es geht nicht wirklich hervor warum du da findViewbyId brauchst ...
 
Ich will einfach beim Drucken eines Knopfes in tab1 auf tab2 eine Grafik ein-/ausblenden mit setVisibility(View.VISIBLE) auf das ImageView.

Jetzt hab ich die Möglichkeit, in onCreate die Id dieses ImageView einer Klassenweiten Variablen zuzuweisen um dann in der "Ausblende-Methode" darauf zuzugreifen. Leider wird onCreate erst aufgerufen, wenn auch das tab das erste mal angezeigt wird und führt somit beim Drücken des Knopfes, bevor das tab1 angezeigt wurde, zur Exception.

Andere Möglichkeit wäre, eben das findViewbyId in die Ausblende-Methode zu packen.

Oder muss ich den Ausblende-Status in ein Flag packen, das dann bei onResume (ist das die richtige Methode dafür) ausgewertet wird. (Hört sich aufwändig an...
 
ok, also bei der sache würde ich wie folgt vorgehen:in Tab1 ist die Grafik die beim ersten start Visible ist. Nun wechselt man zu Tab2, betätigt Button, der besagt das die Grafik aus Tab1 Visible.GONE ist, dazu würde ich dir empfehlen eine static variable zu machen (boolean)nun geht es zurück zu Tab1, da kannst du die Methode onResume() einbinden, diese wird auch mit einen Overide tag versehen, ist eine Methode von der Activity. In dieser Methode kannst du dann nach deiner Variablen aus Tab2 fragen, und je nachdem machst du was oder eben nicht.
 
  • Danke
Reaktionen: Hermi

Ähnliche Themen

Helmut1A
  • Helmut1A
Antworten
7
Aufrufe
1.128
Helmut1A
Helmut1A
D
Antworten
23
Aufrufe
2.558
Data2006
D
M
  • maksimilian
Antworten
15
Aufrufe
1.701
maksimilian
M
Zurück
Oben Unten