Autore Topic: Inizializzazione Fragment  (Letto 356 volte)

Offline FabrizioMarquez

  • Nuovo arrivato
  • *
  • Post: 32
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    lg l70
  • Sistema operativo:
    Android
Inizializzazione Fragment
« il: 19 Aprile 2015, 21:53:58 CEST »
0
Salve a tutti,
Avrei un problema. Ho un app formata da un NavigationDrawable ( Activity ) e due Fragment ( selezionati dalla selezione del Navigation Drawable ) .
il passaggio di dati lo effettuo tramite metodi statici passando dall'activity il problema è l'inizializzazione dei Fragment.
I due fragment sono molto pesanti e pieni di componenti ( textView,bottoni,immagini ) ecc...
i due fragments li inizializzo nel metodo OnCreateView(...) solo che quando seleziono il fragment si carica lentamente, bloccandosi e proseguendo a scatti ( mentre inizializza )
Come posso inizializzare i fragment ? mi spiego meglio, posso inizializzarli in background oppure in un altro metodo ? in modo che quando seleziono il fragment si avvi in modo coerente , senza scatti...
Grazie mille !!!1

Offline tonno16

  • Utente storico
  • *****
  • Post: 1169
  • Respect: +56
    • Mostra profilo
  • Dispositivo Android:
    moto g
  • Play Store ID:
    Diego Tonini
  • Sistema operativo:
    OpenSuse
Re:Inizializzazione Fragment
« Risposta #1 il: 19 Aprile 2015, 22:00:49 CEST »
0
A meno che tu hai un device datato o usi un emulatore il comportamento è anomalo. Anche io nei miei fragmebt ho un sacco di roba. DB animazioni cursori mappe etc. Ma non va lento. Evidentemente hai qualche problema.
Il passaggio di dati non mi convince molto che hai detto tu.
Se devi effettuare della comunicazione dovresti implementare un interfaccia nel fragment e richiamarla dall' activity. In pratica devi farr ponte con la tua activity

Offline FabrizioMarquez

  • Nuovo arrivato
  • *
  • Post: 32
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    lg l70
  • Sistema operativo:
    Android
Re:Inizializzazione Fragment
« Risposta #2 il: 19 Aprile 2015, 22:59:33 CEST »
0
Grazie della risposta.
Ho provato a utilizzare anche un device nuovo e mi da lo stesso problema.
Potresti postare un po di codice ? secondo me non è il passaggio di dati il problema,particamente utilizzo una activity che mi scarica dei dati da una pagina PHP una volta che ha terminato apre l'activity del Navigation Drawable ma nella selezione va a "scatti"
ti posto un attimo il codice
Codice (Java): [Seleziona]
public class Oggtti extends android.support.v4.app.Fragment {
    //Inizializzo Variabili
    ArrayList<Oggetto> lista;
    Spinner spinner;
    TextView textView;
    View viewRoot;

    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        viewRoot = inflater.inflate(R.layout.layout1,container, false);

        lista = MainActivity.getLista();
        spinner = (Spinner) viewRoot.findViewById(R.id.spinner);
        textView = (TextView) viewRoot.findViewById(R.id.textView);
        for (Oggetto c : lista) {
            riempimentoSpinner(spinner);
        }
        spinner.setOnItemSelectedListener(spinnerListener);
        return viewRoot;
    }

    public AdapterView.OnItemSelectedListener spinnerListener = new AdapterView.OnItemSelectedListener() {


        @Override
        public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {

            spinner.setSelection(position);
            String selezionaDato = (String) spinner.getSelectedItem();
            String daVisualizzare = "";
            for (Oggetto o : lista) {
               String t = o.getOggetto();
                if (t.equalsIgnoreCase(selezionaDato)) {
                    daVisualizzare = t;
                }
            }
            textView.setText(daVisualizzare.toString());
        }

        @Override
        public void onNothingSelected(AdapterView<?> parent) {

        }
    };


    public void caricoLista(ArrayList<Oggetto> lista)
    {
        this.lista=lista;
    }

    public void riempimentoSpinner(Spinner spinner) {
        List<String> vettoreOggetti = new ArrayList<String>();
        int i = 0;
        for (Oggetto o : lista) {
            int c = 0;
            boolean inserisci = true;
            String a = o.getOggetto();
            for (String inserimento : vettoreOggetti) {
                if (a.equalsIgnoreCase(a)) {
                    inserisci = false;
                }

            }
            if (inserisci == true) {
                vettoreOggetti.add(a);
            }
        }
        ArrayAdapter<String> adapter = new ArrayAdapter<String>(getActivity().getApplicationContext(),
                R.layout.suggerimenti, vettoreOggetti);
        adapter.setDropDownViewResource(R.layout.suggerimenti);
        spinner.setAdapter(adapter);
    }
}
non guardare il codice che è tutto da modificare , è solo per vedere se ho sbagliato qualcosa concettuale

Offline tonno16

  • Utente storico
  • *****
  • Post: 1169
  • Respect: +56
    • Mostra profilo
  • Dispositivo Android:
    moto g
  • Play Store ID:
    Diego Tonini
  • Sistema operativo:
    OpenSuse
Re:Inizializzazione Fragment
« Risposta #3 il: 19 Aprile 2015, 23:07:18 CEST »
0
Codice (Java): [Seleziona]
 
for (Oggetto c : lista) {
            riempimentoSpinner(spinner);
        }
 

È sbagliato. Fai x volte operazioni inutili. È ridondante. In pratica di fai un algoritmo con 4 for annidati.

Offline FabrizioMarquez

  • Nuovo arrivato
  • *
  • Post: 32
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    lg l70
  • Sistema operativo:
    Android
Re:Inizializzazione Fragment
« Risposta #4 il: 19 Aprile 2015, 23:19:52 CEST »
0
ah cavolo, grazie mille...grazie millee!! era solo questione di rileggere per bene il codice =(

Post unito: 20 Aprile 2015, 00:32:04 CEST
aspetta scusa, ho lo stesso problema nell'altro fragment
Codice (Java): [Seleziona]
    //Dichiarazioni Variabili e componenti Grafici
    AutoCompleteTextView autoCompleteTextView1;
    AutoCompleteTextView autoCompleteTextView2;
    AutoCompleteTextView autoCompleteTextView3;
    AutoCompleteTextView autoCompleteTextView4;
    AutoCompleteTextView autoCompleteTextView5;
    AutoCompleteTextView autoCompleteTextView6;
    AutoCompleteTextView autoCompleteTextView7;
    AutoCompleteTextView autoCompleteTextView8;
    AutoCompleteTextView autoCompleteTextView9;
    AutoCompleteTextView autoCompleteTextView10;
    AutoCompleteTextView autoCompleteTextView11;
    TextView tw1;
    TextView tw2;
    TextView tw3;
    TextView tw4;
    TextView tw5;
    TextView tw6;
    TextView tw7;
    TextView tw8;
    TextView tw9;
    TextView tw10;
    TextView tw11;
    TextView textViewVoto;
    Button bottone;
    View viewRoot;
    private ArrayList<String> lista;


    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

        View viewRoot = inflater.inflate(R.layout.layout_2, container, false);
        //ottengo dall'activity principale la lista
                lista = MenuLaterale.getLista();

        //INIZIALIZZAZIONE VARIABILI
        autoCompleteTextView1 = (AutoCompleteTextView) viewRoot.findViewById(R.id.editText1);
        autoCompleteTextView2 = (AutoCompleteTextView) viewRoot.findViewById(R.id.editText2);
        autoCompleteTextView3 = (AutoCompleteTextView) viewRoot.findViewById(R.id.editText3);
        autoCompleteTextView4 = (AutoCompleteTextView) viewRoot.findViewById(R.id.editText4);
        autoCompleteTextView5 = (AutoCompleteTextView) viewRoot.findViewById(R.id.editText5);
        autoCompleteTextView6 = (AutoCompleteTextView) viewRoot.findViewById(R.id.editText6);
        autoCompleteTextView7 = (AutoCompleteTextView) viewRoot.findViewById(R.id.editText7);
        autoCompleteTextView8 = (AutoCompleteTextView) viewRoot.findViewById(R.id.editText8);
        autoCompleteTextView9 = (AutoCompleteTextView) viewRoot.findViewById(R.id.editText9);
        autoCompleteTextView10 = (AutoCompleteTextView) viewRoot.findViewById(R.id.editText10);
        autoCompleteTextView11 = (AutoCompleteTextView) viewRoot.findViewById(R.id.editText11);


       
        autoCompleteTextView1.setImeOptions(EditorInfo.IME_ACTION_NEXT);
        autoCompleteTextView2.setImeOptions(EditorInfo.IME_ACTION_NEXT);
        autoCompleteTextView3.setImeOptions(EditorInfo.IME_ACTION_NEXT);
        autoCompleteTextView4.setImeOptions(EditorInfo.IME_ACTION_NEXT);
        autoCompleteTextView5.setImeOptions(EditorInfo.IME_ACTION_NEXT);
        autoCompleteTextView6.setImeOptions(EditorInfo.IME_ACTION_NEXT);
        autoCompleteTextView7.setImeOptions(EditorInfo.IME_ACTION_NEXT);
        autoCompleteTextView8.setImeOptions(EditorInfo.IME_ACTION_NEXT);
        autoCompleteTextView9.setImeOptions(EditorInfo.IME_ACTION_NEXT);
        autoCompleteTextView10.setImeOptions(EditorInfo.IME_ACTION_NEXT);
        autoCompleteTextView11.setImeOptions(EditorInfo.IME_ACTION_DONE);

        tw1 = (TextView) viewRoot.findViewById(R.id.textViewVoto1);
        tw2 = (TextView) viewRoot.findViewById(R.id.textViewVoto2);
        tw3 = (TextView) viewRoot.findViewById(R.id.textViewVoto3);
        tw4 = (TextView) viewRoot.findViewById(R.id.textViewVoto4);
        tw5 = (TextView) viewRoot.findViewById(R.id.textViewVoto5);
        tw6 = (TextView) viewRoot.findViewById(R.id.textViewVoto6);
        tw7 = (TextView) viewRoot.findViewById(R.id.textViewVoto7);
        tw8 = (TextView) viewRoot.findViewById(R.id.textViewVoto8);
        tw9 = (TextView) viewRoot.findViewById(R.id.textViewVoto9);
        tw10 = (TextView) viewRoot.findViewById(R.id.textViewVoto10);
        tw11 = (TextView) viewRoot.findViewById(R.id.textViewVoto11);



        settaggioCompilazione(autoCompleteTextView1, tw1);
                settaggioCompilazione(autoCompleteTextView2, tw4);
                settaggioCompilazione(autoCompleteTextView3, tw3);
       //FATTO PER OGNI AUTOTEXVIEW
        // ...
        // ...
                settaggioCompilazione(autoCompleteTextView11, tw11);
               
        textViewVoto = (TextView) viewRoot.findViewById(R.id.textView);
        bottone = (Button) viewRoot.findViewById(R.id.button);
        bottone.setOnClickListener(listener); // LISTENER NON IMPLEMENTATO ma ESEGUE UNA "RICERCA"

        //AGGIUNTA SUGGERIMENTI
        ArrayAdapter<String> adapter = creaAdapter();
        autoCompleteTextView1.setAdapter(adapter);
        autoCompleteTextView2.setAdapter(adapter);
        autoCompleteTextView3.setAdapter(adapter);
        autoCompleteTextView4.setAdapter(adapter);
        autoCompleteTextView5.setAdapter(adapter);
        autoCompleteTextView6.setAdapter(adapter);
        autoCompleteTextView7.setAdapter(adapter);
        autoCompleteTextView8.setAdapter(adapter);
        autoCompleteTextView9.setAdapter(adapter);
        autoCompleteTextView10.setAdapter(adapter);
        autoCompleteTextView11.setAdapter(adapter);

      return viewRoot;
    }


    //AGGIUNGERE SUGGERIMENTI
    public ArrayAdapter<String> creaAdapter() {
        Set<String> listaNomi = new HashSet<String>();
        for (String c : lista) {
            listaNomi.add(c.getNome());
        }
        int indice = 0;
        String vettore[] = new String[listaNomi.size()];
        for (String st : listaNomi) {
            vettore[indice] = st;
            indice++;

        }
        //Riempe l'autoCompleteTextView con i suggerimenti
        ArrayAdapter<String> adapter;
        adapter = new ArrayAdapter<String>(getActivity().getApplicationContext(),R.layout.suggerimenti, vettore);
        return adapter;
    }

    public double cercaNome(List<String> lista, String gioc) {
String nome ="";
        for (String c : lista) {
            String nom = c.getNome();
            if (nom.equalsIgnoreCase(gioc)) {
                nome = c;
            }
        }
        return nome;
    }


    public void settaggioCompilazione(final AutoCompleteTextView actw, final TextView tw) {
        actw.addTextChangedListener(new TextWatcher() {
            @Override
            public void beforeTextChanged(CharSequence s, int start, int count, int after) {

            }

            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count) {

            }

            @Override
            public void afterTextChanged(Editable s) {
                String nome= actw.getText().toString();
                                String nomeSimile = cercaNome(lista,nome);
                    tw.setText("" + nomeSimile);
                         }
        });
    }

}
« Ultima modifica: 20 Aprile 2015, 00:32:04 CEST da FabrizioMarquez, Reason: Merged DoublePost »

Offline tonno16

  • Utente storico
  • *****
  • Post: 1169
  • Respect: +56
    • Mostra profilo
  • Dispositivo Android:
    moto g
  • Play Store ID:
    Diego Tonini
  • Sistema operativo:
    OpenSuse
Re:Inizializzazione Fragment
« Risposta #5 il: 20 Aprile 2015, 07:30:20 CEST »
0
Ci sono molte cose "brutte".
Ma perché non usi una lista?

Offline FabrizioMarquez

  • Nuovo arrivato
  • *
  • Post: 32
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    lg l70
  • Sistema operativo:
    Android
Re:Inizializzazione Fragment
« Risposta #6 il: 20 Aprile 2015, 11:03:11 CEST »
0
Una lista di AutoCompleteTextView,e di TextView ?! ora provo!

Post unito: 20 Aprile 2015, 11:21:39 CEST
A pensarci non avrebbe molto senso perchè comunque le AutoComplete... e le TextView le dovò comunque inizializzare e poi se le metto dentro una lista sono altre operazioni in più da fare quindi "rallenterebbero" il caricamento...
Sto pensando che sia un problema di layout, perchè è formato da un ScrollView contenente un relative layout contenente dei bottoni e un GridLayout nel quale ci sono ImageView con dimenisoni prefissate, Autocomplete..e TextView...
bho
« Ultima modifica: 20 Aprile 2015, 11:21:39 CEST da FabrizioMarquez, Reason: Merged DoublePost »