Autore Topic: list view personalizzata...  (Letto 1133 volte)

Offline sgaglio88

  • Nuovo arrivato
  • *
  • Post: 42
  • Respect: 0
    • Mostra profilo
  • Sistema operativo:
    windows vista
list view personalizzata...
« il: 17 Marzo 2012, 10:25:15 CET »
0
salve ragazzi mi serve urgentemente un consiglio...ho creato una list view con singolo item e immagine associata usando un adapter che però cambia a seconda di alcuni controlli che effettuo quando entro nell'activity...quando vado in un'altra activity però e premo il tasto back voglio che venga memorizzato il click su un toggleButton e che a seconda dello stato di questo button la list activity precedente cambi ancora una volta o se non ho cliccato affatto rimanga tale e quale...in pratica devo simulare l'accendimento e lo spegnimento di un dispositivo... ho provato ad usare il metodo onBackPressed() in cui richiamo l'intent dell'activity della listview dall'activity in cui è presente il toggle button in questo modo:
Codice (Java): [Seleziona]
 public void onBackPressed() {
                        Toast toast = Toast.makeText(getApplicationContext(), "onBackPressed", Toast.LENGTH_SHORT);
                                // Visualizziamo il toast
                                toast.show();
                                Intent setIntent = new Intent(getApplicationContext(), prova6Activity.class);
                       
                        startActivity(setIntent);

                        return;
                    }
ma già qui mi presenta dei problemi e l'applicazione va in crash...forse perchè quando torna indietro deve ricreare la list activity e perde per strada i valori su cui effettuare i controlli... come posso fare?? purtroppo il logcat non posso visualizzarlo perchè sto provando l'applicazione su un dispositvo reale per altri motivi.. HELP :(

Offline bradipao

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 4043
  • keep it simple
  • Respect: +567
    • Github
    • Google+
    • bradipao
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    Bradipao
  • Sistema operativo:
    W7
Re:list view personalizzata...
« Risposta #1 il: 17 Marzo 2012, 11:00:00 CET »
0
Anche se stai usando l'app sul device reale, puoi abilitarne il debug con android:debuggable="true" in application.

E poi con https://play.google.com/store/apps/details?id=org.jtb.alogcat riesci a vedere il logcat direttamente sul terminale (con alcune limitazioni) ed eventualmente spedirlo per email.
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline sgaglio88

  • Nuovo arrivato
  • *
  • Post: 42
  • Respect: 0
    • Mostra profilo
  • Sistema operativo:
    windows vista
Re:list view personalizzata...
« Risposta #2 il: 17 Marzo 2012, 11:52:01 CET »
0
ah...grazie lo installo subito...ma secondo voi quale può essere il problema??cmq vedo se riesco a postare il logcat...

Offline sgaglio88

  • Nuovo arrivato
  • *
  • Post: 42
  • Respect: 0
    • Mostra profilo
  • Sistema operativo:
    windows vista
Re:list view personalizzata...
« Risposta #3 il: 17 Marzo 2012, 12:37:56 CET »
0
Questo è il logcat riferito agli errori:
Codice: [Seleziona]
E/AndroidRuntime( 8292): FATAL EXCEPTION: main
E/AndroidRuntime( 8292): java.lang.RuntimeException: Unable to start activity ComponentInfo{it.android.progetti.prova6/it.android.progetti.prova6.prova6Activity}: java.lang.NullPointerException
E/AndroidRuntime( 8292): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1653)
E/AndroidRuntime( 8292): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1669)
E/AndroidRuntime( 8292): at android.app.ActivityThread.access$1500(ActivityThread.java:117)
E/AndroidRuntime( 8292): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:931)
E/AndroidRuntime( 8292): at android.os.Handler.dispatchMessage(Handler.java:99)
E/AndroidRuntime( 8292): at android.os.Looper.loop(Looper.java:130)
E/AndroidRuntime( 8292): at android.app.ActivityThread.main(ActivityThread.java:3737)
E/AndroidRuntime( 8292): at java.lang.reflect.Method.invokeNative(Native Method)
E/AndroidRuntime( 8292): at java.lang.reflect.Method.invoke(Method.java:507)
E/AndroidRuntime( 8292): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:894)
E/AndroidRuntime( 8292): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:652)
E/AndroidRuntime( 8292): at dalvik.system.NativeStart.main(Native Method)
E/AndroidRuntime( 8292): Caused by: java.lang.NullPointerException
E/AndroidRuntime( 8292): at it.android.progetti.prova6.prova6Activity.onCreate(prova6Activity.java:44)
E/AndroidRuntime( 8292): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
E/AndroidRuntime( 8292): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1617)
E/AndroidRuntime( 8292): ... 11 more
E/AndroidRuntime( 8292): [Blue Error Handler] Make Debugging Report file for main
E/AndroidRuntime( 8292): java.lang.RuntimeException: Unable to start activity ComponentInfo{it.android.progetti.prova6/it.android.progetti.prova6.prova6Activity}: java.lang.NullPointerException
E/AndroidRuntime( 8292): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1653)
E/AndroidRuntime( 8292): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1669)
E/AndroidRuntime( 8292): at android.app.ActivityThread.access$1500(ActivityThread.java:117)
E/AndroidRuntime( 8292): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:931)
E/AndroidRuntime( 8292): at android.os.Handler.dispatchMessage(Handler.java:99)
E/AndroidRuntime( 8292): at android.os.Looper.loop(Looper.java:130)
E/AndroidRuntime( 8292): at android.app.ActivityThread.main(ActivityThread.java:3737)
E/AndroidRuntime( 8292): at java.lang.reflect.Method.invokeNative(Native Method)
E/AndroidRuntime( 8292): at java.lang.reflect.Method.invoke(Method.java:507)
E/AndroidRuntime( 8292): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:894)
E/AndroidRuntime( 8292): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:652)
E/AndroidRuntime( 8292): at dalvik.system.NativeStart.main(Native Method)
E/AndroidRuntime( 8292): Caused by: java.lang.NullPointerException
E/AndroidRuntime( 8292): at it.android.progetti.prova6.prova6Activity.onCreate(prova6Activity.java:44)
E/AndroidRuntime( 8292): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1047)
E/AndroidRuntime( 8292): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1617)
E/AndroidRuntime( 8292): ... 11 more

Ho pensato di mettere il metodo onResume()  ma il problema avviene lo stesso adesso posto la classe che mi va in crash:
Codice (Java): [Seleziona]
package it.android.progetti.prova6;


import android.app.ListActivity;
import android.content.Context;
import android.content.Intent;
import android.content.res.Resources;
import android.content.res.TypedArray;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ListView;
import android.widget.Toast;
//import android.widget.TextView;
import android.widget.AdapterView.OnItemClickListener;
import android.view.KeyEvent;
 
public class prova6Activity extends ListActivity {
    /** Called when the activity is first created. */
       
       
        @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
       
       
       
        final String[] menu1 = new String[4];
        String stato = "Acceso         ";
        Context ctx = getApplicationContext();
        Resources res = ctx.getResources();
     
                int s =0;
       
        Intent intent=getIntent(); // l'intent di questa activity
        final String pkg=getPackageName();
       
        menu1[0]= intent.getStringExtra(pkg+".Dispositivo");
                menu1[1]= intent.getStringExtra(pkg+".Programma");
                menu1[2]= intent.getStringExtra(pkg+".Temperatura");
                menu1[3]= intent.getStringExtra(pkg+".Consumo");
 
                s=menu1[1].compareTo(stato);
       
        final String[] menu = res.getStringArray(R.array.array_data);
       
       
       
        if(s==0){
               
           
                TypedArray immagini = res.obtainTypedArray(R.array.immagini_on);
        setListAdapter(new TestImmagineAdapter(ctx, R.layout.riga_lista, menu, immagini));
       
        ListView listaV = getListView();
        //Abilita il filtro per trovare un elemento digitando le prime lettere
            listaV.setTextFilterEnabled(true);
       
           
            listaV.setOnItemClickListener(new OnItemClickListener() {
                public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                       
                // Quando cliccato visualizza un Toast col nome selezionato
                         Toast.makeText(getApplicationContext(), menu[position], Toast.LENGTH_SHORT).show();
                         if(position==0){
                                 Intent intent = new Intent(getApplicationContext(), OnOffActivity.class);
                                 intent.putExtra(pkg+".Programma", menu1[1]);
                                 startActivity(intent);
                         }
                         if(position==1){
                                 startProgrammaActivity();
                         }
                         if(position==2){
                                 startConsumoActivity();
                         }
                         if(position==3){
                                 startServiziAggActivity();
                         }
                }
              });
 
    }
      else{
                TypedArray immagini = res.obtainTypedArray(R.array.immagini_off);
                setListAdapter(new TestImmagineAdapter(ctx, R.layout.riga_lista, menu, immagini));
           
            ListView listaV = getListView();
            //Abilita il filtro per trovare un elemento digitando le prime lettere
                listaV.setTextFilterEnabled(true);
           
               
                listaV.setOnItemClickListener(new OnItemClickListener() {
                    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                       
                    // Quando cliccato visualizza un Toast col nome selezionato
                         Toast.makeText(getApplicationContext(), menu[position], Toast.LENGTH_SHORT).show();
                         if(position==0){
                                 Intent intent = new Intent(getApplicationContext(), OnOffActivity.class);
                                 intent.putExtra(pkg+".Programma", menu1[1]);
                                 startActivity(intent);
                                 
                         }
                         if(position==1){
                                 startProgrammaActivity();
                         }
                         if(position==2){
                                 startConsumoActivity();
                         }
                         if(position==3){
                                 startServiziAggActivity();
                         }
                    }
                  });
        }
     }
 
    private void startProgrammaActivity() {
                Intent intent = new Intent(this, ProgrammaActivity.class);
                startActivity(intent);
        }
    private void startConsumoActivity() {
                Intent intent = new Intent(this, ConsumoActivity.class);
                startActivity(intent);
        }
    private void startServiziAggActivity() {
                Intent intent = new Intent(this, ServiziAggActivity.class);
                startActivity(intent);
        }
   
    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event)  {
       
               
           
            onBackPressed();
       

        return true;
    }

    @Override
    public void onBackPressed() {
   
        Intent setIntent = new Intent(Intent.ACTION_MAIN);
        setIntent.addCategory(Intent.CATEGORY_HOME);
        setIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        startActivity(setIntent);

        return;
    }
   
 
    public void createListLavatrice_on(){
        final String  menu1;
         menu1= getDataIntent();
         final String pkg=getPackageName();
          Context ctx = getApplicationContext();
          Resources res = ctx.getResources();
          TypedArray immagini = res.obtainTypedArray(R.array.immagini_on);
          final String[] menu = res.getStringArray(R.array.array_data);
          setListAdapter(new TestImmagineAdapter(ctx, R.layout.riga_lista, menu, immagini));
         
          ListView listaV = getListView();
          //Abilita il filtro per trovare un elemento digitando le prime lettere
              listaV.setTextFilterEnabled(true);
         
             
              listaV.setOnItemClickListener(new OnItemClickListener() {
                  public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                       
                  // Quando cliccato visualizza un Toast col nome selezionato
                         Toast.makeText(getApplicationContext(), menu[position], Toast.LENGTH_SHORT).show();
                         if(position==0){
                                 Intent intent = new Intent(getApplicationContext(), OnOffActivity.class);
                                 intent.putExtra(pkg+".Programma", menu1);
                                 startActivity(intent);
                                 
                         }
                         if(position==1){
                                 startProgrammaActivity();
                         }
                         if(position==2){
                                 startConsumoActivity();
                         }
                         if(position==3){
                                 startServiziAggActivity();
                         }
                  }
                });
      }
   
   
   
    public void createListLavatrice_off(){
        final String  menu1;
         menu1= getDataIntent();
         final String pkg=getPackageName();
          Context ctx = getApplicationContext();
          Resources res = ctx.getResources();
          TypedArray immagini = res.obtainTypedArray(R.array.immagini_off);
          final String[] menu = res.getStringArray(R.array.array_data);
          setListAdapter(new TestImmagineAdapter(ctx, R.layout.riga_lista, menu, immagini));
     
      ListView listaV = getListView();
      //Abilita il filtro per trovare un elemento digitando le prime lettere
          listaV.setTextFilterEnabled(true);
     
         
          listaV.setOnItemClickListener(new OnItemClickListener() {
              public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
               
              // Quando cliccato visualizza un Toast col nome selezionato
                 Toast.makeText(getApplicationContext(), menu[position], Toast.LENGTH_SHORT).show();
                 if(position==0){
                         Intent intent = new Intent(getApplicationContext(), OnOffActivity.class);
                         intent.putExtra(pkg+".Programma", menu1);
                         startActivity(intent);
                         
                 }
                 if(position==1){
                         startProgrammaActivity();
                 }
                 if(position==2){
                         startConsumoActivity();
                 }
                 if(position==3){
                         startServiziAggActivity();
                 }
              }
            });
  }
       
 
    @Override
        protected void onResume()
        {
                super.onResume();
           final String menu;
        String stato = "Acceso         ";
        int s =0;
       
       
           menu=getDataIntent();
        s=menu.compareTo(stato);
       
        if(s==0)
        {
                 createListLavatrice_on();
        }else{
                createListLavatrice_off();
        }
        }
   
    public String getDataIntent(){
               
                    final String menu1;
                    Intent intent=getIntent(); // l'intent di questa activity
                final String pkg=getPackageName();
               
               
                        menu1= intent.getStringExtra(pkg+".Programma");
                       
                       
                return menu1;
        }
 
     
}

Offline pivoide

  • Utente junior
  • **
  • Post: 133
  • Respect: +19
    • Mostra profilo
  • Dispositivo Android:
    Samsung galaxy tab 10.1
  • Play Store ID:
    codicerosso
  • Sistema operativo:
    Ubuntu 11.04
Re:list view personalizzata...
« Risposta #4 il: 17 Marzo 2012, 13:55:00 CET »
0
Sembrerebbe che le stringhe di menu1 siano nulle
Odio l'inglese e per un informatico non è il massimo

Offline sgaglio88

  • Nuovo arrivato
  • *
  • Post: 42
  • Respect: 0
    • Mostra profilo
  • Sistema operativo:
    windows vista
Re:list view personalizzata...
« Risposta #5 il: 17 Marzo 2012, 18:25:51 CET »
0
infatti sembrerebbe che sia proprio quello il problema...ma io le istanzio dopo che entro nell'activity successiva..la prima volta che avvio l'applicazione saranno sempre null..come faccio a dire che se sono null deve fregarsene??
« Ultima modifica: 17 Marzo 2012, 18:27:28 CET da sgaglio88 »

Offline blackgin

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 1387
  • Respect: +164
    • Google+
    • blackgins
    • blackginsoft
    • Mostra profilo
  • Dispositivo Android:
    Galaxy Nexus
  • Sistema operativo:
    Mac OSX 10.8
Re:list view personalizzata...
« Risposta #6 il: 17 Marzo 2012, 18:29:41 CET »
0
Con un semplice if(stringa==null) ?
Postate il LogCat LogCat LogCat LogCat LogCat

Offline sgaglio88

  • Nuovo arrivato
  • *
  • Post: 42
  • Respect: 0
    • Mostra profilo
  • Sistema operativo:
    windows vista
Re:list view personalizzata...
« Risposta #7 il: 18 Marzo 2012, 12:37:49 CET »
0
si così diciamo che ho risolto parzialmente il problema...ma adesso voglio che la mia stringa si annulli dp il primo accesso nella classe così quando entrerò dinuovo non causerà problemi come posso fare??

Offline sgaglio88

  • Nuovo arrivato
  • *
  • Post: 42
  • Respect: 0
    • Mostra profilo
  • Sistema operativo:
    windows vista
Re:list view personalizzata...
« Risposta #8 il: 18 Marzo 2012, 17:11:16 CET »
0
ho risolto grazie alle shared preferences...grazie comunque del supporto..:D