2013-07-06 10 views
5

Ho un errore di sintassi con il mio codice, nel "getView" Voglio rendere un listener per il pulsante "aggiornamento "per passare a un'altra attività:Come risolvere il metodo startActivity (Intent) non è definito per il nuovo tipo di errore di sintassi View.OnClickListener()

enter image description here

@Override 
    public View getView(int position, View convertView, ViewGroup parent) { 


     LayoutInflater l = (LayoutInflater) context.getSystemService(context.LAYOUT_INFLATER_SERVICE); 
     View rowView = l.inflate(R.layout.temp, parent, false); 
     TextView textView = (TextView) rowView.findViewById(R.id.textView1); 
     ImageView imageView = (ImageView) rowView.findViewById(R.id.imageView1); 
     Button update = (Button) rowView.findViewById(R.id.button1); 

//  update.setOnClickListener(new View.OnClickListener() { 
//   
//   @Override 
//   public void onClick(View v) { 
// 
//     Intent redirect = new Intent(getApplicationContext(),Update.class); 
//     startActivity(redirect); 
//    
//   } 
//  }); 




     textView.setText(sa.get(position)); 


     return rowView; 
    } 

ho cercato di correggere questi errori di "intenti" ma ho fallito :(

  1. Il metodo startActivity (Intent) è u ndefined per il tipo nuovo View.OnClickListener()

  2. Il metodo getApplicationContext() è definito per il tipo nuovo View.OnClickListener()

e metodo ancora whene ho spostato queste dichiarazioni di "onClick" il problema non è cambiato !! Ho importato la libreria "Intent", come risolverlo ????

+0

è la vostra classe di adattatori in un file diverso? – Raghunandan

risposta

14

Se la scheda è in un file diverso avrai bisogno del contesto di attività.

È necessario passare il contesto di attività dalla classe di attività al costruttore dell'adattatore.

http://developer.android.com/reference/android/content/Context.html#startActivity(android.content.Intent)

startActivity è un metodo della classe di attività. Quindi hai bisogno di un contesto di attività per iniziare l'attività.

Inoltre anziché getApplicationContext utilizzare il contesto di attività.

When to call activity context OR application context?

Controllare la risposta commonsware.

 update.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 

      Intent redirect = new Intent(context,Update.class); 
      context.startActivity(redirect);  
     } 
     }); 
+1

@ Akari felice che abbia aiutato. – Raghunandan

+0

ogni cosa va bene :)))) – Akari

2

Prova

final Activity thisActivity = this; 

update.setOnClickListener(new View.OnClickListener() { 

      @Override 
      public void onClick(View v) { 

       Intent redirect = new Intent(thisActivity,Update.class); 
       thisActivity.startActivity(redirect); 

      } 
     }); 
1

Hai solo bisogno di chiamare context.startActivity invece, può seguire la procedura

Tre semplici passi

1) dichiarare locale variabile Context mCtx

2) intialize con Contesto di attività passando un parametro a costruttore/metodo o nel metodo onCreate se si utilizza sopra co de in attività.

3) chiamare mCtx.startActivity(intent);

o

è possibile chiamare ActivityName.this.startActivity()

Edit: - Come par commento DMON, si può semplicemente utilizzare l'istanza contesto locale

+0

C'è già una variabile di contesto in quel metodo. – dmon

0

La radice del problema è che non è possibile avviare un'attività da un contesto di applicazione (solo da un contesto di attività si ha il diritto di farlo).Il motivo è che Android raggruppa tutte le attività della tua applicazione come gruppo (attività) per consentire il multitasking tra diverse app. Quando si avvia una nuova app, o si preme il pulsante home, ad esempio, si è un'applicazione (insieme con il suo backstack di attività) sta andando in background e lascia la scena a una nuova attività (con un diverso backstack di attività e così via e così via). Per maggiori informazioni su questo meccanismo puoi dare un'occhiata qui (http://developer.android.com/guide/components/tasks-and-back-stack.html).

Per ottenere un contesto che è ok per lanciare una nuova attività, è sempre possibile ottenere il contesto del genitore della vista che si sta gonfiando, chiamando viewgroup.getContext() - anche se si dovrà dichiarare il viewgroup come finale, che va bene visto che non dovresti toccare il genitore.

una bozza del GetView:

@Override 
    public void onClick(View v) { 
        Intent intent = new Intent(G.context, SecondActivity.class); 
        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
        G.context.startActivity(intent); 
    } 
    }); 

contesto aggiuntivo in G Classe::

@Override 
public View getView(int position, View convertView, final ViewGroup parent) { 


    LayoutInflater l = (LayoutInflater) context.getSystemService(context.LAYOUT_INFLATER_SERVICE); 
    View rowView = l.inflate(R.layout.temp, parent, false); 
    TextView textView = (TextView) rowView.findViewById(R.id.textView1); 
    ImageView imageView = (ImageView) rowView.findViewById(R.id.imageView1); 
    Button update = (Button) rowView.findViewById(R.id.button1); 

    update.setOnClickListener(new View.OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      Intent redirect = new Intent(parent.getContext(),Update.class); 
      startActivity(redirect); 
     } 
    }); 




    textView.setText(sa.get(position)); 


    return rowView; 
} 
2

per problema simile per me proprio questo mi ha aiutato

public class G extends Activity { 

    public static Context context; 


    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
     context = getApplicationContext(); 

    } 
} 
Problemi correlati