Skicka data i en Tabview

Diskussion i 'Frågor, support och diskussion' startad av Sigma78, 2 dec 2010.

  1. Sigma78

    Sigma78 Teen Droid Medlem

    Blev medlem:
    27 jul 2010
    Inlägg:
    360
    Mottagna gillanden:
    6

    MINA ENHETER

    Jag har precis börjat prova på androidutveckling och sitter just nu och sliter mitt hår med en TabView.

    Jag har fått min TabView att visas, och jag har en klass (Activity) för varje tab. De visar startvärdena fint. I min huvudaktivitet (TabActivity) har jag bland annat lagt in en Optionsmeny. När användaren väljer saker där vill jag att data ska skickas till den aktiva tabben så att den kan justera innehållet.

    Hur gör jag för att anropa en tab och skicka data till den?
    Så fort jag försöker deklarera TabHost och TabSpec utanför OnCreate för att de ska vara referbara utan metoden får jag FC.

    Min TabHost har jag lyckats hitta med getTabHost(), men hur gör jag med tabbarna?
     
  2. Zooklubba

    Zooklubba Android Medlem

    Blev medlem:
    10 jul 2010
    Inlägg:
    6 448
    Mottagna gillanden:
    2 199

    MINA ENHETER

    Kör du SharedPreferences för din optionmeny? Oavsett så kan du väl använda sharedpreferences och ha en editor där du skriver in variabeln om det nu är en string, bool eller vad du nu vill ha med en key för att sedan hämta den variabeln i varje klass som behöver den. Det är väl enklare för att bygga ut.

    Om du ändrar inställningen i huvudaktiviteten behöver du väl inte ha datan mer än när du startar respektive Tab/Activity för tab? Startar du Intent för vardera tab? Då kan du köra intent.putExtra och lägga till vad du vill ha där.
     
  3. Sigma78

    Sigma78 Teen Droid Medlem

    Blev medlem:
    27 jul 2010
    Inlägg:
    360
    Mottagna gillanden:
    6

    MINA ENHETER

    Tack för svaret! Då har jag ett par nya begrepp att googla exempel på :)

    SharedPreferences verkar vara det hetaste spåret just nu, det låter som att det löser mina problem.

    Edit: Nu har jag kommit vidare. Jag har satt upp en SharedPreferences, och den fungerar fint. Jag kan läsa och skriva värden i den utan problem.

    Däremot verkar ingen av metoderna onStart eller onResume köras för aktiviteten i tabben efter att jag har tagit upp optionsmenyn, så jag måste byta tab och tillbaka för att ändringen ska slå igenom.

    Hur gör jag för att tvinga fram en refresh eller liknande med de nya värdena på enklaste sätt?
     
    Last edited: 2 dec 2010
  4. Zooklubba

    Zooklubba Android Medlem

    Blev medlem:
    10 jul 2010
    Inlägg:
    6 448
    Mottagna gillanden:
    2 199

    MINA ENHETER

    Ganska trevligt att kunna ändra den på flera ställen om så behövs. Glöm dock inte att köra .commit() på din editor :D
     
  5. Sigma78

    Sigma78 Teen Droid Medlem

    Blev medlem:
    27 jul 2010
    Inlägg:
    360
    Mottagna gillanden:
    6

    MINA ENHETER

    Jag skrev en metod för att köra de fyra kommandon som behövs för att lagra nya värden så att jag ska slippa tänka på det :-)

    Något tips på hur jag ska få min tab att uppdateras med den nya infon när jag har ändrat ett värde?
     
  6. woody

    woody Teen Droid Medlem

    Blev medlem:
    3 sept 2009
    Inlägg:
    319
    Mottagna gillanden:
    19

    MINA ENHETER

  7. Sigma78

    Sigma78 Teen Droid Medlem

    Blev medlem:
    27 jul 2010
    Inlägg:
    360
    Mottagna gillanden:
    6

    MINA ENHETER

    Jag har försökt och försökt, men jag får inte rätt på det. Ska det fungera i en Tabview på det sättet?

    Jag har försökt lägga in callbacken i min FirstTab.java, och modifieringarna sker i min huvudaktivitet, den som har TabHosten.

    Så här ser min kod ut i FirstTab.java. Jag får ingen träff på någon av mina toasts som ska visa att det fungerar.

    final Activity activity = this;
    SharedPreferences prefs;

    protected Listener mListener;

    private final OnSharedPreferenceChangeListener mSharedPreferenceChangeListener =
    new OnSharedPreferenceChangeListener() {
    public void onSharedPreferenceChanged(
    SharedPreferences Settings, String Neighbourhood) {
    Toast.makeText(activity, "Shared preferences changed 2", Toast.LENGTH_LONG).show();
    if (mListener != null) {
    mListener.onSharedPreferencesChanged();
    Toast.makeText(activity, "Shared preferences changed 3", Toast.LENGTH_LONG).show();
    }
    }
    };

    static public interface Listener {
    // public void onPopupWindowVisibilityChanged(int visibility);
    // public void onRestorePreferencesClicked();
    public void onSharedPreferencesChanged();
    }

    public void onSharedPreferenceChanged(SharedPreferences Settings, String Neighbourhood)
    {
    Toast.makeText(this, "Shared preferences changed", Toast.LENGTH_LONG).show();
    // nSharedPreferencesChanged();
    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(activity);
    prefs.registerOnSharedPreferenceChangeListener(mSharedPreferenceChangeListener);

    }

    }
     
    Last edited: 7 dec 2010