Autore Topic: Muovere una Private Void nella Util.java  (Letto 502 volte)

Offline Emanuele Tinari

  • Nuovo arrivato
  • *
  • Post: 4
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Samsung Note 4
  • Sistema operativo:
    Windows 8.1
Muovere una Private Void nella Util.java
« il: 11 Marzo 2016, 09:06:07 CET »
0
Buongiorno a tutti e grazie per l'attenzione. Ho una domanda forse banale ma che mi sta da qualche giorno impegnando.
Ho una subroutine di gestione dell'ActionBar che funziona egregiamente nell'ActivityMain e che vorrei implementare anche nelle alfre activity della mia App, una decina circa.
Per non riscriverla ogni volta, ma specialmente per rendere più pulito il mio codice volevo 'spostarla' nell'Util.java che già utilizzo con alcune funzioni.
Allo stato attuale ecco cosa ho:
MainActivity.java
Codice (Java): [Seleziona]
public class MainActivity extends Activity
{
    // Variabili utilizzate.
    ActionBar actionbar;
    TextView textview;
    LayoutParams layoutparams;
    @Override
    // Called when the activity is first created.
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        // Imposto il layout.
        setContentView(R.layout.activity_main);
        // Passo il nome dell'Activity alla funzione ActionBarTitleGravity.
        ActionBarTitleGravity("Menù iniziale");
    private void ActionBarTitleGravity(String NomePagina)
    {
        actionbar = getActionBar();
        textview = new TextView(getApplicationContext());
        layoutparams = new RelativeLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT);
        textview.setLayoutParams(layoutparams);
        textview.setText(NomePagina);
        // Sfondo della TextView.
        //textview.setBackgroundColor(Color.GRAY);
        // Colore del testo.
        textview.setTextColor(Color.WHITE);
        // Testo in grassetto.
        //textview.setTypeface(null, Typeface.BOLD_ITALIC);
        // Testo sottolineato.
        //textview.setPaintFlags(Paint.UNDERLINE_TEXT_FLAG);
        // Posizione del testo.
        textview.setGravity(Gravity.CENTER);
        // Dimensione del testo.
        textview.setTextSize(24);
        // Variabile contenente la cartella dei font negli Assets.
        String PercorsoFont = "fonts/gotham_nights_italic.ttf";
        // Legge il Typeface font dalla Stringa PercorsoFont.
        Typeface FontLoaderTypeface;
        FontLoaderTypeface = Typeface.createFromAsset(getAssets(), PercorsoFont);
        textview.setTypeface(FontLoaderTypeface);
        actionbar.setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM);
        // Imposto l'origine dell'ActionBar dalla casella di testo.
        actionbar.setCustomView(textview);
    }
}

Ecco cosa sto tentando di fare, portando fuori la sub nell'Util.java
Util.java
Codice (Java): [Seleziona]
public class Util extends Application
{
    public static void ActionBarTitleGravity(String NomePagina)
    {
        ActionBar actionbar = getActionBar(); // <---------------------- Qui AndroidStudio dice marcando in rosso "Cannot resolve method 'getActionBar()' "
        TextView textview = new TextView(getApplicationContext()); // <- Qui AndroidStudio dice sottolineando in rosso " Non-static method 'getApplicationContext()' cannot be referenced from a static context"
        LayoutParams layoutparams = new RelativeLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT);
        textview.setLayoutParams(layoutparams);
        textview.setText(NomePagina);
        // Sfondo della TextView.
        //textview.setBackgroundColor(Color.GRAY);
        // Colore del testo.
        textview.setTextColor(Color.WHITE);
        // Testo in grassetto.
        //textview.setTypeface(null, Typeface.BOLD_ITALIC);
        // Testo sottolineato.
        //textview.setPaintFlags(Paint.UNDERLINE_TEXT_FLAG);
        // Posizione del testo.
        textview.setGravity(Gravity.CENTER);
        // Dimensione del testo.
        textview.setTextSize(24);
        // Variabile contenente la cartella dei font negli Assets.
        String PercorsoFont = "fonts/gotham_nights_italic.ttf";
        // Legge il Typeface font dalla Stringa PercorsoFont.
        Typeface FontLoaderTypeface;
        FontLoaderTypeface = Typeface.createFromAsset(getAssets(), PercorsoFont);
        textview.setTypeface(FontLoaderTypeface);
        actionbar.setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM);
        // Imposto l'origine dell'ActionBar dalla casella di testo.
        actionbar.setCustomView(textview);
    }
}
Che richiamerei nella MainActivity in questo modo:
Codice (Java): [Seleziona]
public class MainActivity extends Activity
{
    @Override
    // Called when the activity is first created.
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        // Imposto il layout.
        setContentView(R.layout.activity_main);
        // Passo il nome dell'Activity alla funzione ActionBarTitleGravity.
        Util.ActionBarTitleGravity("Menù iniziale");
}
Manco riesco a compilare poichè si blocca evidenziandomi in rosso i due problemi sopra esposti.
Credo bisogni introdurre un context per fare riferimento all'Activity però non so come muovermi.
Grazie per l'attenzione e per l'aiuto che vorrete darmi.
Emanuele
« Ultima modifica: 11 Marzo 2016, 09:09:35 CET da Emanuele Tinari »

Offline zezzo

  • Nuovo arrivato
  • *
  • Post: 33
  • Respect: +3
    • Mostra profilo
Re:Muovere una Private Void nella Util.java
« Risposta #1 il: 11 Marzo 2016, 10:52:11 CET »
0
Forse più che Util.java, ti conviene scrivere il codice in questione un file BaseActivity poi all'interno delle tue 10 activity che dicevi fai un extends

tipo: public class MainActivity extends BaseActivity

tempo fa ho usato questa soluzione per implementare del codice da richiamare all'interno di tutte le activity dell'app.

Offline Emanuele Tinari

  • Nuovo arrivato
  • *
  • Post: 4
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Samsung Note 4
  • Sistema operativo:
    Windows 8.1
Re:Muovere una Private Void nella Util.java
« Risposta #2 il: 11 Marzo 2016, 15:31:57 CET »
0
Grazie al suggerimento di zezzo, mi son incuriosito ed ecco come ho risolto la cosa. Metterò poi Risolto al topic lasciando ai posteri la soluzione che ha fatto al mio caso.
Grazie ancora anche per le visite! :-)

Ho creato innanzitutto una nuova classe chiamandola:

BaseActivity

Ecco di seguito il codice:

Codice (Java): [Seleziona]
import ...
public abstract class BaseActivity extends Activity
{
    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
    }
    public void ActionBarTitleGravity(String NomePagina)
    {
        ActionBar actionbar = getActionBar();
        TextView textview = new TextView(getApplicationContext());
        RelativeLayout.LayoutParams layoutparams = new RelativeLayout.LayoutParams(RelativeLayout.LayoutParams.MATCH_PARENT, RelativeLayout.LayoutParams.WRAP_CONTENT);
        textview.setLayoutParams(layoutparams);
        // Recupera il nome dell'Activity passato dall'Activity che si sta aprendo.
        textview.setText(NomePagina);
        // Imposta un colore di sfondo della TextView.
        //textview.setBackgroundColor(Color.GRAY);
        // Colore del testo.
        textview.setTextColor(Color.WHITE);
        // Testo in grassetto.
        //textview.setTypeface(null, Typeface.BOLD_ITALIC);
        // Testo sottolineato.
        //textview.setPaintFlags(Paint.UNDERLINE_TEXT_FLAG);
        // Posizione del testo.
        textview.setGravity(Gravity.CENTER);
        // Dimensione del testo.
        textview.setTextSize(24);
        // Variabile contenente la cartella dei font negli Assets.
        String PercorsoFont = "fonts/gotham_nights_italic.ttf";
        // Legge il Typeface font dalla Stringa PercorsoFont.
        Typeface FontLoaderTypeface;
        FontLoaderTypeface = Typeface.createFromAsset(getAssets(), PercorsoFont);
        textview.setTypeface(FontLoaderTypeface);
        actionbar.setDisplayOptions(ActionBar.DISPLAY_SHOW_CUSTOM);
        // Imposto l'origine dell'ActionBar dalla casella di testo.
        actionbar.setCustomView(textview);
    }
}

Quindi nelle varie Activity, a cominciare dall'ActivityMain ho modificato alcuni punti per far estendere l'Activity stessa così:

Codice (Java): [Seleziona]
import ...
public class MainActivity extends BaseActivity
{
    @Override
    // Called when the activity is first created.
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        // Imposto il layout.
        setContentView(R.layout.activity_main);
        // Passo il nome dell'Activity alla funzione ActionBarTitleGravity.
        ActionBarTitleGravity("Menù iniziale");
    }
}

Se confrontate il codice dell'ActivityMain precedentemente da me postato e quello attuale noterete alcune diversità. La più evidente è che ho eliminato le dichiarazioni delle 3 variabili e tutto il blocco di codice della ActionBarTitleGravity(String NomePagina) poichè è stato totalmente spostato nella BaseActivity.
Attenzione anche all'extends BaseActivity che ha sostituito in OGNI activity l'extends Activity.
Grazie di tutto, spero che questo thread serva anche a qualcun altro, magari alle primissime armi come me.
Emanuele Tinari