2013-07-06 13 views
5

Ich habe einen Syntaxfehler mit meinem Code, in der "getView" möchte ich einen Listener für den Button "update ", um auf eine andere Tätigkeit zu bewegen:Wie zu beheben Die Methode startActivity (Intent) ist nicht definiert für den Typ new View.OnClickListener() Syntaxfehler

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; 
    } 

ich habe versucht, diese Fehler beheben zu "Intent" aber ich nicht :(

  1. Verfahren startActivity (Intent) ist u ndefined für den Typ neuen View.OnClickListener()

  2. Verfahren getApplicationContext() ist nicht definiert für den Typ neuen View.OnClickListener()

und sogar whene zog ich diese Aussagen von "onClick" -Methode Das Problem hat sich nicht geändert !! Ich importierte "Intent" -Bibliothek, wie man das löst ????

+0

ist Ihre Adapter-Klasse in einer anderen Datei? – Raghunandan

Antwort

14

Wenn Ihr Adapter ist in Für eine andere Datei benötigen Sie einen Aktivitätskontext.

Sie müssen den Aktivitätskontext von Ihrer Aktivitätsklasse an Ihren Adapterkonstruktor übergeben.

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

startActivity ist eine Methode der Aktivitätsklasse. Sie benötigen also einen Aktivitätskontext, um die Aktivität zu starten.

Auch statt getApplicationContext Aktivitätskontext verwenden.

When to call activity context OR application context?

Überprüfen Sie die Antwort von commonsware.

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

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

@Akari froh, dass es geholfen hat. – Raghunandan

+0

alles ist in Ordnung :)))) – Akari

2

Versuchen

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

Sie müssen nur context.startActivity stattdessen aufrufen, können unter Schritte folgen

Drei einfache Schritte

1) Erklären Sie lokale Variable Context mCtx

2) intialize es mit Aktivitätskontext, entweder durch Übergeben eines Parameters an Konstruktor/Methode oder in der onCreate-Methode, wenn Sie über co arbeiten de in Aktivität.

3) rufen mCtx.startActivity(intent);

oder

Sie ActivityName.this.startActivity()

Bearbeiten aufrufen können: - Wie par DMON Kommentar, einfach Sie Ihre lokalen Kontext-Instanz verwenden können

+0

Es gibt bereits eine Kontextvariable in dieser Methode. – dmon

0

Die Wurzel des Problems ist, dass Sie nicht eine Aktivität von einem Anwendungskontext (nur aus einer Tätigkeit Kontext Sie das Recht, das zu tun) beginnen können.Der Grund dafür ist, dass Android alle Aktivitäten Ihrer Anwendung als Gruppe (Task) bündelt, um Multitasking zwischen verschiedenen Apps zu ermöglichen. Wenn Sie eine neue App starten oder zum Beispiel die Home-Taste drücken, geht Ihre Anwendung (zusammen mit ihren Aktivitäten Backstack) in den Hintergrund und überlässt die Szene einer neuen Aufgabe (mit einem anderen Aktivitäts-Backstack und so weiter und so fort). Weitere Informationen zu diesem Mechanismus finden Sie hier (http://developer.android.com/guide/components/tasks-and-back-stack.html).

Um einen Kontext zu erhalten, der für eine neue Aktivität geeignet ist, können Sie immer den Kontext des übergeordneten Elements der Ansicht abrufen, indem Sie viewgroup.getContext() aufrufen, obwohl Sie dies deklarieren müssen die Viewgroup als final, was in Ordnung ist, da du die Eltern nicht berühren solltest.

ein Entwurf Ihres getView:

@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

für ähnliches Problem für mich nur half dies mir:

@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); 
    } 
    }); 

add Kontext in G-Klasse:

public class G extends Activity { 

    public static Context context; 


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

    } 
} 
Verwandte Themen