Autore Topic: ExpandableListView  (Letto 637 volte)

Offline blasco991

  • Nuovo arrivato
  • *
  • Post: 7
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Desire HD
  • Sistema operativo:
    Windows 7 - x64
ExpandableListView
« il: 14 Giugno 2012, 03:07:20 CEST »
0
Buona sera a tutti,
dopo ore e ore di debug ed interminabili sessioni di ricerca su ogni forum di sviluppo android mi arrendo e consegno il mio destino nelle vostre mani.
Con tanta fatica e buona volontà mi sono implementato una ExpandableListView con il relativo adapter.
Funziona tutto correttamente, unico neo, alla seconda riapertura di un group, qualsiasi esso sia, si mangia l'ultimo child e non me lo visualizza, nonostante venga richiamato correttamente il metodo getChildView che restituisce il valore corretto; ripeto accade soltanto se un group è stato espanso in precedenza, vi prego illuminatemi perchè sto schizzando non capisco come possa succedere.

In allegato il sorgente. Grazie.

La classe pizza è solo un'entita con 4 attributi {nome, prezzo, tipo, ingredienti}

Codice (Java): [Seleziona]
package xRazorblack.GestionePizzeria.PizzaFamilyClient;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.ObjectOutputStream;
import java.net.InetSocketAddress;
import java.net.Socket;
import java.net.UnknownHostException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import android.app.AlertDialog;
import android.app.ExpandableListActivity;
import android.content.Context;
import android.content.SharedPreferences;
import android.net.ConnectivityManager;
import android.os.AsyncTask;
import android.os.Bundle;
import android.preference.PreferenceManager;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.View.OnClickListener;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.AdapterView.OnItemSelectedListener;
import android.widget.ArrayAdapter;
import android.widget.BaseExpandableListAdapter;
import android.widget.Button;
import android.widget.LinearLayout;
import android.widget.SimpleExpandableListAdapter;
import android.widget.Spinner;
import android.widget.TextView;
import android.widget.Toast;

public class CustomizeOrder extends ExpandableListActivity {

        ArrayList<Pizza> ordinazione;
        ArrayList<Pizza> ordinazioneElaborata;
        private PizzaListAdapter adapter;
        SharedPreferences pref;
        List list;
        ConnectionDB asyncTask;

        @Override
        protected void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                pref = PreferenceManager
                                .getDefaultSharedPreferences(getApplicationContext());
                setContentView(R.layout.customizing_order);
                Button send = (Button) findViewById(R.id.buttonSendOrder);
                send.setOnClickListener(new OnClickListener() {
                        public void onClick(View v) {
                                ordinazioneElaborata = getCustomizedOrder();
                                asyncTask = new ConnectionDB();
                                asyncTask.execute(ordinazione);
                        }
                });
                ABC s = ABC.getSingletonObject();
                ordinazione = s.getPizzasList();
                setListAdapter(new ExpAdapter(this));
        }

        @Override
        public void onBackPressed() {
                ordinazione = null;
                super.onBackPressed();
        }

        protected void send(String[] nomeCognomeUserID,
                        ArrayList<Pizza> ordinazioneElaborata2) {
                AlertDialog alertDialog = new AlertDialog.Builder(CustomizeOrder.this)
                                .create();
                String st = "";
                String ip = getString(R.string.IPServerListen3G);
                try {
                        ConnectivityManager connectivityManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
                        if (connectivityManager.getActiveNetworkInfo().getTypeName()
                                        .equals("WIFI")) {
                                if (!connectivityManager.requestRouteToHost(
                                                ConnectivityManager.TYPE_WIFI,
                                                ABC.lookupHost(getString(R.string.IPServerListen3G))))
                                        ip = getString(R.string.IPServerListenSameWifi);
                        }
                        InetSocketAddress addr = new InetSocketAddress(ip, 8181);
                        Socket socket = new Socket();
                        socket.connect(addr);
                        ObjectOutputStream output = new ObjectOutputStream(
                                        socket.getOutputStream());
                        output.writeObject(ordinazioneElaborata);
                        output.flush();
                        output.writeObject(nomeCognomeUserID);
                        output.flush();
                        BufferedReader input = new BufferedReader(new InputStreamReader(
                                        socket.getInputStream()));
                        String nextLine = "";
                        do {
                                st += nextLine;
                        } while (!(nextLine = input.readLine()).contains("Orario"));
                        st += nextLine;
                        socket.close();
                } catch (UnknownHostException e) {
                        alertDialog.setTitle("Error");
                        alertDialog.setMessage(e.toString());
                        alertDialog.show();
                } catch (IOException e) {
                        alertDialog.setTitle("Error");
                        alertDialog.setMessage(e.toString());
                        alertDialog.show();
                }
                alertDialog.setTitle("Response");
                alertDialog.setMessage((st != "" ? st : "Nessuna risposta"));
                alertDialog.show();
        }

        protected ArrayList<Pizza> getCustomizedOrder() {

                return ordinazione;

        }

        private class ConnectionDB extends
                        AsyncTask<ArrayList<Pizza>, Integer, String[]> {

                private String userid;

                protected String[] doInBackground(ArrayList<Pizza>... datiUtente) {
                        int ID = pref.getInt("id", 0);
                        String nomeCognomeUser = pref.getString("nome", "");
                        nomeCognomeUser += pref.getString("cognome", "");
                        nomeCognomeUser += pref
                                        .getString("user", "lettura cliente fallita");
                        String[] strings = { nomeCognomeUser, ID + "" };
                        return strings;

                }

                @Override
                protected void onPostExecute(String[] strings) {
                        send(strings, ordinazioneElaborata);
                        super.onPostExecute(null);
                }
        }

        public class ExpAdapter extends BaseExpandableListAdapter {

                private Context myContext;
                final ArrayAdapter<CharSequence> adapter = ArrayAdapter
                                .createFromResource(CustomizeOrder.this, R.array.tipoPizza,
                                                android.R.layout.simple_spinner_item);

                public ExpAdapter(Context context) {
                        myContext = context;
                }

                public Object getChild(int groupPosition, int childPosition) {
                        return null;
                }

                public long getChildId(int groupPosition, int childPosition) {
                        return 0;
                }

                public View getChildView(final int groupPosition, int childPosition,
                                boolean isLastChild, View convertView, ViewGroup parent) {
                        if (childPosition != 0) {
                                if (convertView == null) {
                                        LayoutInflater inflater = (LayoutInflater) myContext
                                                        .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
                                        convertView = inflater.inflate(R.layout.child_row, null);
                                }
                                TextView ingrdienteTextView = (TextView) convertView
                                                .findViewById(R.id.grp_child);
                                ingrdienteTextView.setText(ordinazione.get(groupPosition)
                                                .getIngredienti().split(",")[childPosition - 1]);
                                Spinner spinner = (Spinner) convertView
                                                .findViewById(R.id.spinnerTipo);
                                spinner.setVisibility(View.GONE);
                        } else {
                                if (convertView == null) {
                                        LayoutInflater inflater = (LayoutInflater) myContext
                                                        .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
                                        convertView = inflater.inflate(R.layout.child_row_first,
                                                        null);
                                }
                                TextView ingrdienteTextView = (TextView) convertView
                                                .findViewById(R.id.grp_child);
                                Spinner spinner = (Spinner) convertView
                                                .findViewById(R.id.spinnerTipo);
                                adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
                                spinner.setAdapter(adapter);
                                spinner.setOnItemSelectedListener(new OnItemSelectedListener() {
                                        public void onItemSelected(AdapterView<?> arg0, View arg1,
                                                        int arg2, long arg3) {
                                                String selected = arg0.getItemAtPosition(arg2)
                                                                .toString();
                                                int tipo = (selected.contains("Normale") ? Pizza.Normale
                                                                : (selected.contains("Mini") ? Pizza.Maxi
                                                                                : Pizza.Maxi));
                                                ordinazione.get(groupPosition).setTipo(tipo);
                                        }

                                        public void onNothingSelected(AdapterView<?> parent) {
                                        }

                                });
                                spinner.setVisibility(View.VISIBLE);
                                ingrdienteTextView.setVisibility(View.GONE);
                        }
                        return convertView;
                }

                public int getChildrenCount(int groupPosition) {
                        return ordinazione.get(groupPosition).getIngredienti().split(",").length + 1;
                }

                public Object getGroup(int groupPosition) {
                        return ordinazione.get(groupPosition);
                }

                public int getGroupCount() {
                        return ordinazione.size();
                }

                public long getGroupId(int groupPosition) {
                        return ordinazione.get(groupPosition).hashCode();
                }

                public View getGroupView(int groupPosition, boolean isExpanded,
                                View convertView, ViewGroup parent) {

                        if (convertView == null) {
                                LayoutInflater inflater = (LayoutInflater) myContext
                                                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
                                convertView = inflater.inflate(R.layout.group_row, null);
                        }

                        TextView tvGroupName = (TextView) convertView
                                        .findViewById(R.id.row_name);
                        tvGroupName.setText(ordinazione.get(groupPosition).getNome());
                        return convertView;
                }

                public boolean hasStableIds() {
                        return false;
                }

                public boolean isChildSelectable(int groupPosition, int childPosition) {
                        return true;
                }
        }
}