Autore Topic: Pushbutton alla fine di una listview  (Letto 613 volte)

Offline schumy79

  • Nuovo arrivato
  • *
  • Post: 23
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy S2 - GT-I9100
  • Sistema operativo:
    Win7 X64
Pushbutton alla fine di una listview
« il: 27 Agosto 2012, 16:00:40 CEST »
0
Ciao a tutti,
sto imparando a sviluppare app e per "cavia" sto facendo una app per il fantacalcio per i miei amici. Ho un problema relativo alla generazione di un pushbutton alla fine di una listview: l'activity accede ad una pagina php e tramite Json e custom adapter compila la listview con i giocatori. al termine di questa lista voglio inserire almento un pushbutton attraverso il quale inviare la formazione al sito (altervista). Il problema è che inserendolo prima della listview, il bottone viene visualizzato correttamente, non lo è quando messo in coda. Come e dove gestire questo pulsante? Ho letto di aggiungere un footer, ma per fare il custom adapter ho seguito il tutoral (ottimo per altro) di Ricky riguardante la creazione di un custom array adapter [medio] ListView con layout personalizzato tramite un custom ArrayAdapter - Android Developers Italia.
Grazie in anticipo per le risposte.  :D

Questo è il main layout

Codice (XML): [Seleziona]
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
   android:id="@+id/main_insert_formazione_layout_copy"
   android:layout_width="fill_parent"
   android:layout_height="fill_parent"
   android:orientation="vertical" >

    <LinearLayout
       android:id="@+id/header"
       android:layout_width="fill_parent"
       android:layout_height="wrap_content"
       android:background="#ff347c12" >

        <TextView
           android:id="@+id/formazione_h_ruolo"
           android:layout_width="wrap_content"
           android:layout_height="fill_parent"
           android:height="30dip"
           android:text="@string/ruolo"
           android:textColor="@color/black"
           android:width="100dip" />

        <TextView
           android:id="@+id/formazione_h_giocatore"
           android:layout_width="wrap_content"
           android:layout_height="fill_parent"
           android:height="30dip"
           android:text="@string/giocatore"
           android:textColor="@color/black"
           android:width="125dip" />

        <TextView
           android:id="@+id/formazione_h_titolare"
           android:layout_width="wrap_content"
           android:layout_height="fill_parent"
           android:height="30dip"
           android:text="@string/titolare"
           android:textColor="@color/black"
           android:width="23dip" />

        <TextView
           android:id="@+id/formazione_h_p1"
           android:layout_width="wrap_content"
           android:layout_height="fill_parent"
           android:height="30dip"
           android:text="@string/p1"
           android:textColor="@color/black"
           android:width="23dip" />

        <TextView
           android:id="@+id/formazione_h_p2"
           android:layout_width="wrap_content"
           android:layout_height="fill_parent"
           android:height="30dip"
           android:text="@string/p2"
           android:textColor="@color/black"
           android:width="23dip" />

        <TextView
           android:id="@+id/formazione_h_out"
           android:layout_width="wrap_content"
           android:layout_height="fill_parent"
           android:height="30dip"
           android:text="@string/out"
           android:textColor="@color/black"
           android:width="23dip" />
    </LinearLayout>

    <View
       android:layout_width="fill_parent"
       android:layout_height="1dip"
       android:background="?android:attr/listDivider" />

    <LinearLayout
       android:id="@+id/layout"
       android:layout_width="wrap_content"
       android:layout_height="fill_parent" >

        <ListView
           android:id="@+id/array_insert_formazione"
           android:layout_width="fill_parent"
           android:layout_height="fill_parent" >
        </ListView>

    </LinearLayout>

</LinearLayout>

Questo è il row layout

Codice (XML): [Seleziona]
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
   android:id="@+id/formazione_rowscopy"
   android:layout_width="fill_parent"
   android:layout_height="fill_parent"
   android:orientation="horizontal" >

    <LinearLayout
       android:layout_width="fill_parent"
       android:layout_height="fill_parent"
       android:orientation="horizontal" >

        <TextView
           android:id="@+id/ins_for_idruolocopy"
           android:layout_width="wrap_content"
           android:layout_height="fill_parent"
           android:textColor="@color/white"
           android:width="100dip" >
        </TextView>

        <TextView
           android:id="@+id/ins_for_idnomecopy"
           android:layout_width="wrap_content"
           android:layout_height="fill_parent"
           android:textColor="@color/white"
           android:width="125dip" >
        </TextView>

        <RadioGroup
           android:layout_width="fill_parent"
           android:layout_height="20dp"
           android:checkedButton="@+id/out"
           android:orientation="horizontal" >

            <RadioButton
               android:id="@+id/t1"
               android:layout_width="23dp"
               android:button="@drawable/button_radio"
               android:height="1dp"
               android:width="1dp" />

            <RadioButton
               android:id="@+id/p1"
               android:layout_width="23dp"
               android:button="@drawable/button_radio"
               android:height="1dp"
               android:width="1dp" />

            <RadioButton
               android:id="@+id/p2"
               android:layout_width="23dp"
               android:button="@drawable/button_radio"
               android:height="1dp"
               android:width="1dp" />

            <RadioButton
               android:id="@+id/out"
               android:layout_width="23dp"
               android:button="@drawable/button_radio"
               android:height="1dp"
               android:width="1dp" />
        </RadioGroup>
    </LinearLayout>

</RelativeLayout>

Ora purtroppo non posso allegare lo screen di risultato poichè il proxy me lo impedisce, ma provvederò al più presto.

Questo, invece, è il codice dell'activity che viene eseguito; il link url è tagliato appositamente

Codice (Java): [Seleziona]
package it.fantacalcio;

import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Random;

import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import it.fantacalcio.R;
import android.app.Activity;
import android.os.AsyncTask;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import android.widget.Toast;
import android.widget.TextView;
import android.view.View;

public class New_Insert_formazione extends Activity {

        private static String url_read_class = "http://";

        ArrayList<HashMap<String, String>> list_rosa;
        InputStream is = null;
        ListView insertlistview;
        View footer;
        String usr, pwd, id_squadra, result = null;

        public void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);

                MyAppData Myappdata = (MyAppData) getApplication();
                usr = Myappdata.get_user();
                pwd = Myappdata.get_pwd();
                id_squadra = Myappdata.get_id_team();

                setContentView(R.layout.copy_main_insert_formazione);
                insertlistview = (ListView) findViewById(R.id.array_insert_formazione);

                insertlistview.setAdapter(new Formazione_Adapter(this,
                                R.layout.copy_insert_formazione, new ArrayList<Formazione>()));

                new BackgroundWorker().execute();

        }

        private class BackgroundWorker extends AsyncTask<Void, Formazione, Void> {
                @SuppressWarnings("unchecked")
                @Override
                protected void onPreExecute() {
                        // Prima di iniziare a inserire gli elementi svuotiamo l'adapter
                        ((ArrayAdapter<Formazione>) insertlistview.getAdapter()).clear();
                        super.onPreExecute();
                }

                @Override
                protected Void doInBackground(Void... params) {

                        ArrayList<NameValuePair> postParameters = new ArrayList<NameValuePair>();
                        postParameters.add(new BasicNameValuePair("id_team", id_squadra));

                        try {
                                HttpClient httpclient = new DefaultHttpClient();
                                HttpPost httppost = new HttpPost(url_read_class);
                                httppost.setEntity(new UrlEncodedFormEntity(postParameters));
                                HttpResponse response = httpclient.execute(httppost);
                                HttpEntity entity = response.getEntity();
                                is = entity.getContent();
                        } catch (Exception e) {
                                Toast errorhttp = Toast.makeText(getApplicationContext(),
                                                "Error in http connection ", Toast.LENGTH_SHORT);
                                errorhttp.show();
                        }

                        try {
                                BufferedReader reader = new BufferedReader(
                                                new InputStreamReader(is, "iso-8859-1"), 8);
                                StringBuilder sb = new StringBuilder();
                                String line = null;
                                while ((line = reader.readLine()) != null) {
                                        sb.append(line + "\n");
                                }
                                is.close();

                                result = sb.toString();
                        } catch (Exception e) {
                                Log.e("log_tag", "Error converting result " + e.toString());
                        }

                        try {
                                JSONArray jArray = new JSONArray(result);
                                for (int i = 0; i < jArray.length(); i++) {
                                        JSONObject json_data = jArray.getJSONObject(i);
                                        HashMap<String, String> data = new HashMap<String, String>();

                                        Formazione[] form = { new Formazione(
                                                        json_data.getString("Ruolo"),
                                                        json_data.getString("Nome_calciatore")) };

                                        // riempimento casuale della lista delle persone
                                        Random r = new Random();

                                        // for (int i = 0; i < 1000; i++) {

                                        // Pubblichiamo il progresso
                                        publishProgress(form[r.nextInt(form.length)]);
                                }
                        } catch (JSONException e) {
                                Log.e("log_tag", "Error parsing data " + e.toString());
                        }
                        return null;
                }

                @Override
                protected void onProgressUpdate(Formazione... values) {
                        // Aggiungiamo il progresso pubblicato all'adapter
                        ((ArrayAdapter<Formazione>) insertlistview.getAdapter())
                                        .add(values[0]);
                        super.onProgressUpdate(values);
                }
        }
}

« Ultima modifica: 27 Agosto 2012, 16:35:22 CEST da schumy79 »

Offline Nicola_D

  • Moderatore
  • Utente storico
  • *****
  • Post: 2479
  • SBAGLIATO!
  • Respect: +323
    • Github
    • Google+
    • nicoladorigatti
    • Mostra profilo
  • Dispositivo Android:
    Nexus 6p, Nexus 4, Nexus S, Nexus 7(2012)
  • Sistema operativo:
    Windows 7
Re:Pushbutton alla fine di una listview
« Risposta #1 il: 27 Agosto 2012, 16:43:42 CEST »
0
2 opzioni:
fai un relative layout, il bottone lo metti con alignParentBottom e poi ci inserisci la listview con android:above="buttonID"
oppure invece che dare fill parent alla listview gli dai un weight=1 e height="0dp", poi inserisci il bottone tranquillamente
IMPORTANTE:NON RISPONDO A PROBLEMI VIA MESSAGGIO PRIVATO
LOGCAT: Non sai cos'è? -> Android Debug Bridge | Android Developers
               Dov'è in Eclipse? -> Window -> Open Prospective -> DDMS e guarda in basso!
[Obbligatorio] Logcat, questo sconosciuto! (Gruppo AndDev.it LOGTFO) - Android Developers Italia

Offline schumy79

  • Nuovo arrivato
  • *
  • Post: 23
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy S2 - GT-I9100
  • Sistema operativo:
    Win7 X64
Re:Pushbutton alla fine di una listview
« Risposta #2 il: 27 Agosto 2012, 16:46:06 CEST »
0
Ok Grazie Nicola.
Domanda Stupida: supponendo di fare la seconda opzione, il bottone fa nello stesso layout della listview?

Edit: ho fatto la prima e funziona! era semplice ma essendo alle prime armi...
Grazie.
Chiudo ;)
« Ultima modifica: 27 Agosto 2012, 17:05:43 CEST da schumy79 »