Autore Topic: aggiornare una view di un fragment  (Letto 770 volte)

Offline esoni

  • Utente junior
  • **
  • Post: 102
  • Respect: 0
    • Mostra profilo
aggiornare una view di un fragment
« il: 27 Agosto 2012, 11:52:37 CEST »
0
ciao ragazzi ho un fragment con una view che deve essere aggiornata se arriva un valore al broadcast receiver.
vi posto il codice del mio fragment che è molto semplice
Codice (Java): [Seleziona]
package com.viewpagerindicator.sample;

import it.frongillo.dashboard.view.halfcircleView.SpeedView;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.RelativeLayout;

public class GeneralFragmentPage extends Fragment{
        public final static String UP_SPEED="UP_SPEED";
        public static final String TAG="TabTest";

        private SpeedView speed;
         public static GeneralFragmentPage newInstance(String content) {
                 GeneralFragmentPage f1=new GeneralFragmentPage();
                 return f1;
         }
         
          // onCreateView :
           @Override
           public View onCreateView(LayoutInflater inflater,ViewGroup container,Bundle savedInstanceState) {
             
              // fragment not when container null
              if (container == null) {
                 return null;
              }
              // inflate view from layout
              View view = (RelativeLayout)inflater.inflate(R.layout.general_page,container,false);
              Log.d(TAG,"inflate general page");

              // get button reference
              speed=(SpeedView)view.findViewById(R.id.textView1);
              Log.d(TAG,"preso riferimento a speedview");
              return view;
           }
           
           @Override
            public void onResume(){
                super.onResume();
                IntentFilter intentFilter = new IntentFilter();
           
                intentFilter.addAction(UP_SPEED);
               
                getActivity().registerReceiver(mReceiver, intentFilter);
                      Log.d(TAG,"registrato broadcast receiver");


            }
           @Override
                public void onPause(){
                        super.onPause();
                        if (mReceiver != null){
                              Log.d(TAG,"deregistrato broadcast receiver");

                                getActivity().unregisterReceiver(mReceiver);
                        }
           }
           
           private final BroadcastReceiver mReceiver=new BroadcastReceiver(){

                        @Override
                        public void onReceive(Context context, Intent intent) {
                                String action=intent.getAction();
                                String resp;
                                if(action.equals(UP_SPEED)){
                                      Log.d(TAG,"arrivata velocita al broad:"+intent.getIntExtra(UP_SPEED, 0));

                                        speed.setSpeed(intent.getIntExtra(UP_SPEED, 0));
                                }
                       
                        }
           };
}


col log cat ho visto che il valore arriva senza errori:
08-27 11:47:38.430: D/TabTest(893): inflate general page
08-27 11:47:38.430: D/TabTest(893): preso riferimento a speedview
08-27 11:47:38.430: D/TabTest(893): registrato broadcast receiver
08-27 11:47:47.600: D/TabTest(893): arrivata velocita al broad:150


molto probabilmente l errore avviene quando eseguo
               speed.setSpeed(intent.getIntExtra(UP_SPEED, 0));
che è il metodo di una mia customview perfettamente funzionante.
l eccezzione che viene lanciata è:
Codice (Java): [Seleziona]
08-27 11:47:47.605: E/AndroidRuntime(893): FATAL EXCEPTION: main
08-27 11:47:47.605: E/AndroidRuntime(893): java.lang.RuntimeException: Error receiving broadcast Intent { act=UP_SPEED flg=0x10 (has extras) } in com.viewpagerindicator.sample.GeneralFragmentPage$1@414f1638
08-27 11:47:47.605: E/AndroidRuntime(893):      at android.app.LoadedApk$ReceiverDispatcher$Args.run(LoadedApk.java:737)
08-27 11:47:47.605: E/AndroidRuntime(893):      at android.os.Handler.handleCallback(Handler.java:605)
08-27 11:47:47.605: E/AndroidRuntime(893):      at android.os.Handler.dispatchMessage(Handler.java:92)
08-27 11:47:47.605: E/AndroidRuntime(893):      at android.os.Looper.loop(Looper.java:137)
08-27 11:47:47.605: E/AndroidRuntime(893):      at android.app.ActivityThread.main(ActivityThread.java:4507)
08-27 11:47:47.605: E/AndroidRuntime(893):      at java.lang.reflect.Method.invokeNative(Native Method)
08-27 11:47:47.605: E/AndroidRuntime(893):      at java.lang.reflect.Method.invoke(Method.java:511)
08-27 11:47:47.605: E/AndroidRuntime(893):      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:790)
08-27 11:47:47.605: E/AndroidRuntime(893):      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:557)
08-27 11:47:47.605: E/AndroidRuntime(893):      at dalvik.system.NativeStart.main(Native Method)
08-27 11:47:47.605: E/AndroidRuntime(893): Caused by: java.lang.NullPointerException
08-27 11:47:47.605: E/AndroidRuntime(893):      at com.viewpagerindicator.sample.GeneralFragmentPage$1.onReceive(GeneralFragmentPage.java:75)
08-27 11:47:47.605: E/AndroidRuntime(893):      at android.app.LoadedApk$ReceiverDispatcher$Args.run(LoadedApk.java:728)
08-27 11:47:47.605: E/AndroidRuntime(893):      ... 9 more
ammetto che sono alle prima armi, forse  sbaglio qualcosa nell aggiornare la view da fragment. please help me  :-X

Offline esoni

  • Utente junior
  • **
  • Post: 102
  • Respect: 0
    • Mostra profilo
Re:aggiornare una view di un fragment
« Risposta #1 il: 27 Agosto 2012, 11:58:54 CEST »
0
risolto scusatemi ho fatt una grande c*****a... avevo sbagliato id della speed view