Autore Topic: aggiornare un'activity in un tabhost  (Letto 998 volte)

Offline japper

  • Nuovo arrivato
  • *
  • Post: 27
  • Respect: 0
    • Mostra profilo
aggiornare un'activity in un tabhost
« il: 23 Luglio 2012, 17:20:55 CEST »
0
salve ho un tabhost con due tabspec... a un certo punto dentro una tabspec voglio eliminare un item dalla lista e naturalmente devo aggiornare la lista...sapete come si fa ad aggiornare un activity dentro una tabhost?

TabHostActivity
Codice (Java): [Seleziona]
package com.androiddandeme.layout.tabhost;

import android.app.Activity;
import android.app.LocalActivityManager;
import android.app.TabActivity;
import android.content.Context;
import android.content.Intent;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.os.Bundle;
import android.widget.TabHost;
import android.widget.TabHost.TabSpec;
import android.widget.TextView;

import com.androiddandeme.R;
import com.androiddandeme.activity.MainActivity;
import com.androiddandeme.activity.PreferitiActivity;

public class TabHostActivity extends TabActivity {

        private TabHost tabHost;
        private Context mContext;
        private TabSpec preferitiSpec;

        @Override
        public void onCreate(Bundle bundle) {
                super.onCreate(bundle);
                mContext = this;
                setContentView(R.layout.tabhost);
                tabHost = getTabHost();
                // TabHost tabHost = (TabHost)findViewById(R.id.tabHost);
                tabHost.setup();

                // controllo sulla connessione ad internet
                // ConnectivityManager cm =
                // (ConnectivityManager)this.getSystemService(Context.CONNECTIVITY_SERVICE);
                //
                // NetworkInfo activeNetwork = cm.getActiveNetworkInfo();
                // boolean isConnected = activeNetwork.isConnectedOrConnecting();
                // Tab per MainActivity
                TabSpec mainSpec = tabHost.newTabSpec("Lista");
                if (!isConnected()) {
                        // metto il focus sul tab Preferiti
                        tabHost.setCurrentTab(1);
                        // creo una textview per avvisare che nn c'è la connessione
                        TextView text = new TextView(this);
                        text.setText("Non c'è connessione");
                        mainSpec.setContent(R.id.textOffConnection);
                } else {
                        Intent mainIntent = new Intent(this, MainActivity.class);
                        mainSpec.setContent(mainIntent);
                }
                mainSpec.setIndicator("News");

                // Tab per Preferiti
                preferitiSpec = tabHost.newTabSpec("Preferiti");
                preferitiSpec.setIndicator("Preferiti");
                Intent preferitiIntent = new Intent(this, PreferitiActivity.class);
                preferitiIntent.putExtra("RefreshContacts", "true");
                //ogni volta che visualizza l'activity viene visualizzata una nuova activity
                preferitiIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
                preferitiSpec.setContent(preferitiIntent);
                tabHost.addTab(mainSpec);
                tabHost.addTab(preferitiSpec);
        }

        public boolean isConnected() {
                ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
                NetworkInfo netInfo = cm.getActiveNetworkInfo();
                if (netInfo != null && netInfo.isConnected()) {
                        return true;
                }
                return false;
        }
       
        public void refreshPreferiti(){
                LocalActivityManager manager = getLocalActivityManager();
                String currentTag = tabHost.getCurrentTabTag();
                Class<? extends Activity> currentClass = manager.getCurrentActivity().getClass();
                manager.destroyActivity(currentTag, true);
                manager.startActivity(currentTag, new Intent(this, currentClass));
        }
}

preferity activity
Codice (Java): [Seleziona]
package com.androiddandeme.activity;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import android.app.Activity;
import android.app.Dialog;
import android.app.ProgressDialog;
import android.content.Context;
import android.content.Intent;
import android.database.Cursor;
import android.os.AsyncTask;
import android.os.Bundle;
import android.text.Html;
import android.util.Log;
import android.view.ContextMenu;
import android.view.ContextMenu.ContextMenuInfo;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ListView;
import android.widget.SimpleAdapter;
import android.widget.TextView;
import android.widget.Toast;

import com.androiddandeme.R;
import com.androiddandeme.dao.ArticoloDao;
import com.androiddandeme.database.sqlite.ArticoliPreferitiDB;
import com.androiddandeme.layout.listview.SeparatedListAdapter;
import com.androiddandeme.vo.ArticoloVo;

public class PreferitiActivity extends Activity {
        private ArticoloDao articoloDao = null;
        private SeparatedListAdapter adapter = null;
        private ListView lstView = null;
        protected static final int CONTEXTMENU_DELETEITEM = 0;
        private ArticoliPreferitiDB db = null;
        private List<ArticoloVo> articoli = null;
        private Context mContext = null;
        private ProgressDialog mProgressDialog = null;
        private List<String> lstDate = null;

        @Override
        public void onCreate(Bundle bundle) {
                super.onCreate(bundle);
                mContext = this;
                // questa lista conterrà tutti i articoli dal database
                articoli = new ArrayList<ArticoloVo>();
                // preparo la lista con tutti i Preferiti
                db = new ArticoliPreferitiDB(mContext);
                db.open();
                // eseguo la query sul database per farmi restituire tutti i articoli
                // nel database
                Cursor cursor = db.fetchArticoli();
                cursor.moveToFirst();
                // carico la lista con tutti aritcoli dal database
                for (int i = 0; i < cursor.getCount() && 0 < cursor.getCount(); i++) {
                        String indice = cursor.getString(1);
                        String title = cursor.getString(2);
                        String link = cursor.getString(3);
                        String data = cursor.getString(4);
                        String dataIntera = cursor.getString(5);
                        String descrizione = cursor.getString(6);
                        String content = cursor.getString(7);
                        articoli.add(new ArticoloVo(title, descrizione, data, link,
                                        content, indice, dataIntera));
                        cursor.moveToNext();
                }
                db.close();
                setContentView(R.layout.activity_preferiti);
                int i = riempiLista();
                if (i != -1) {
                        // imposto l'evento che deve fare quando viene clicato un
                        // articolo
                        lstView.setOnItemClickListener(new OnItemClickListener() {
                                public void onItemClick(AdapterView<?> adapterView, View view,
                                                int position, long id) {

                                        nextActivity(position);
                                }
                        });
                        registerForContextMenu(lstView);
                }
        }

        /**
         * Riempo la listaview con i articoli dal database
         *
         */

        public int riempiLista() {
                // creo ArticoloDao per la gestione della lista
                articoloDao = new ArticoloDao(articoli);
                lstDate = articoloDao.getDataList();
                // prendo la lista con tutte le date dei articoli salvati nel
                // database
                // se la lista è vuota creo una text view
                if (lstDate.size() == 0) {
                        TextView text = new TextView(this);
                        text.setText("Non c'è presente nessun articolo nei preferiti");
                        setContentView(text);
                        return -1;
                } else {
                        setContentView(R.layout.activity_preferiti);
                        // preparo il frome to per SimpleAdapter
                        String[] from = new String[] { "title", "description" };
                        int[] to = new int[] { R.id.list_item_title,
                                        R.id.list_item_description };
                        // invoco il mio BaseAdapter
                        adapter = new SeparatedListAdapter(this);
                        for (String data : lstDate) {
                                // prendo la lista con tutti i articoli di una data
                                List<ArticoloVo> lstArticoli = articoloDao
                                                .getArticoliOfData(data);
                                // creo una lista di mappe di tutti i articoli per una data
                                List<Map<String, String>> mappa = creaMappa(lstArticoli);
                                SimpleAdapter listadapter = new SimpleAdapter(this, mappa,
                                                R.layout.list_item, from, to);
                                adapter.addSection(data, listadapter);
                        }
                        lstView = (ListView) findViewById(R.id.listViewPreferiti);
                        lstView.setAdapter(adapter);
                        return 0;
                }
        }

        /**
         * salve nell'intent tutti i dati di un ArticoloVo e starta ArticoloActivity
         */

        public void nextActivity(int position) {
                Intent intent = new Intent(getApplicationContext(),
                                ArticoloActivity.class);
                // carico nell'intent titolo e content per inviare a
                // ArticoloActivity
                Object articolo = adapter.getItem(position);
                Map<String, String> map = (Map) articolo;
                String title = map.get("title");
                ArticoloVo articoloD = null;
                articoloD = articoloDao.getArticolo(title);
                intent.putExtra("indiceActivityRichiesta", "preferiti");
                Log.i("PreferitiActivity", articoloD + "");
                intent.putExtra("indiceActivity", articoloD.getIndice());
                intent.putExtra("titleActivity", title);
                intent.putExtra("contentActivity", articoloD.getContent());
                intent.putExtra("linkActivity", articoloD.getLink());
                intent.putExtra("dataActivity", articoloD.getData());
                intent.putExtra("dataInteraActivity", articoloD.getDataIntera());
                intent.putExtra("descriptionActivity", articoloD.getDescrizione());
                startActivity(intent);

        }

        /**
         * definisco la visuale del menu premendo a lungo un articolo
         */

        public void onCreateContextMenu(ContextMenu contextMenu, View view,
                        ContextMenuInfo menuInfo) {
                contextMenu.setHeaderTitle(R.string.menuTitlePreferiti);
                contextMenu.add(Menu.NONE, 1, 1, R.string.menuView);
                contextMenu.add(Menu.NONE, 2, 2, R.string.menuDelete);
        }

        /**
         * definisco le operazioni da fare per ogni opzione sul menuContext
         */

        public boolean onContextItemSelected(MenuItem item) {
                int id = item.getItemId();
                AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo) item
                                .getMenuInfo();
                switch (id) {
                // Opzione View
                case 1:
                        nextActivity(info.position);
                        return true;
                        // Opzione DELETE
                case 2:
                        // cancello il record dal database
                        db.open();
                        // prendo l'indiceArticolo
                        Object articolo = adapter.getItem(info.position);
                        Map<String, String> map = (Map) articolo;
                        String title = map.get("title");

                        ArticoloVo articoloD = articoloDao.getArticolo(title);
                        // cancello record
                        db.deleteEntry(articoloD.getIndice());
                        db.close();
                        Toast.makeText(PreferitiActivity.this, R.string.menuToastDelete,
                                        Toast.LENGTH_SHORT).show();
                        // refresh activity
                        // Intent intent = new
                        // Intent(getApplicationContext(),TabHostActivity.class);
                        // intent.putExtra("flagFocus", "1");
                        // startActivity(getIntent());
                        // finish();
                        return true;

                }
                Toast.makeText(PreferitiActivity.this, "ERRORE", Toast.LENGTH_SHORT)
                                .show();
                return false;
        }

        /**
         * mi restituisce una lista di mappe con title e description , per
         * SimpleAdapter
         *
         * @param articoli
         * @return
         */

        public List<Map<String, String>> creaMappa(List<ArticoloVo> articoli) {
                List<Map<String, String>> lstMappa = new ArrayList<Map<String, String>>();
                for (ArticoloVo articolo : articoli) {
                        Map<String, String> map = new HashMap<String, String>();
                        map.put("title", Html.fromHtml(articolo.getTitle()).toString());
                        map.put("description", Html.fromHtml(articolo.getDescrizione())
                                        .toString());
                        lstMappa.add(map);
                }
                return lstMappa;
        }


}


quando tengo premuto su un item nella listview di PreferitiActivity , mi appare un context menu. Se scelgo cancella item mi ellimina senza problemi ,però nn mi aggiorna la lista.Sapete aiutarmi?

Offline japper

  • Nuovo arrivato
  • *
  • Post: 27
  • Respect: 0
    • Mostra profilo
Re:aggiornare un'activity in un tabhost
« Risposta #1 il: 24 Luglio 2012, 10:08:48 CEST »
0
Risolto :)... basta rifare il setAdapter con la nuova lista senza l'articolo elliminato

Offline dAn89

  • Nuovo arrivato
  • *
  • Post: 37
  • Respect: 0
    • Mostra profilo
    • WhiteHole - Soluzioni Informatiche
  • Sistema operativo:
    OS X
Re:aggiornare un'activity in un tabhost
« Risposta #2 il: 24 Luglio 2012, 16:27:59 CEST »
0
Japper una curiosità..
quando fai 
Codice: [Seleziona]
Intent mainIntent = new Intent(this, MainActivity.class);
                        mainSpec.setContent(mainIntent);
chiede anche a te il localactivitymanager anche se deprecato?

e una seconda cosa, ho anche io due tab, in uno di questi c'è un login. A login effettuato viene caricata una nuova activity di riepilogo, solo che ovviamente si toglie la tabhost sotto. Sai mica come cambiare activity all'interno di una tab?

Offline japper

  • Nuovo arrivato
  • *
  • Post: 27
  • Respect: 0
    • Mostra profilo
Re:aggiornare un'activity in un tabhost
« Risposta #3 il: 26 Luglio 2012, 09:53:08 CEST »
0
allora del localActivityManager nn me lo chiede , e poi dipende da che uso devi fare.

Per il secondo problema ho anche il tuo stesso problema e nn so come risolverlo, penso che dovrei ricrearmi il tabHost con le activity diverse