2016-11-12 2 views
-1

ich in einer Klasse bin, der keine Aktivität und ich versuche, die Methode startActivity zuzugreifen und auch MainActivity zu machen eine Absicht, wie dies nicht reicht: meinMit startActivity außerhalb einer Aktivität

Intent intent = new Intent(MainActivity, MusicasPlaylistActivity.class); 
PlayList item = (PlayList) adapter.getItem(position); 
intent.putExtra("id", item.getId()); 
startActivity(intent); 

Aber im Innern Klasse Ich kann die Methode "startActivity" nicht sehen, und ich kann "MainActivity" weder sehen, weil meine Klasse keine Aktivität erweitert, weil sie bereits eine andere Klasse erweitert (RecyclerView.ViewHolder).

Wie kann ich auf die startActivity-Methode und die MainActivity zugreifen, um die Absicht zu machen?

+0

müssen Sie den Rahmen Ihrer Tätigkeit haben es so verwenden Sie es wie 'context.startActivity' und verwenden diese' Intent (Kontext, MusicasPlaylistActivity.class); ' –

+0

Sie müssen Rückruf/Hörer verwenden, um dies zu tun. Rufen Sie die Startaktivität nicht außerhalb des Kontextes auf. Verwenden Sie diese https://gist.github.com/chowii/0e87e75b06e217b380ae5482b7c06c8e – sabbibJAVA

Antwort

0

Wie kann ich auf die startActivity-Methode und die MainActivity zugreifen, um die Absicht zu machen?

Sie benötigen ein Context Objekt dafür. Sie können es entweder an den Konstruktor übergeben oder in Ihrem Fall RecyclerView.ViewHolderitemView verwenden, um es abzurufen. Z.B.

Intent intent = new Intent(itemView.getContext(), MusicasPlaylistActivity.class); 
PlayList item = (PlayList) adapter.getItem(position); 
intent.putExtra("id", item.getId()); 
itemView.getContext().startActivity(intent); 

itemView ist die public final View halten durch RecyclerView.ViewHolder

+0

Dies ist eine schlechte Praxis, wenn Sie versuchen, etwas in Bezug auf eine Ansicht oder Kontext tun tun es tun. Lassen Sie die Aktivität oder das Fragment MusicasPlaylistActivity nicht von Ihrem ViewHolder aufrufen. Dazu benötigen Sie einen Rückruf. Rufen Sie die Startaktivität nicht außerhalb des Kontextes auf. Verwenden Sie dies als Leitfaden gist.github.com/chowii/0e87e75b06e217b380ae5482b7c06c8e – sabbibJAVA

1

In der Klasse Constructor Pass Kontext wie folgt aus:

public class YourClass{ 
    private Context context; 
    public YourClass(Context context){ 
    this.context = context; 
    } 
} 

dann

Intent intent = new Intent(MainActivity, MusicasPlaylistActivity.class); 
PlayList item = (PlayList) adapter.getItem(position); 
intent.putExtra("id", item.getId()); 
context.startActivity(intent); 
1

einfach den Kontext Akivität bekommen. Dann ruf an.

Intent intent = new Intent(yourcontext, MusicasPlaylistActivity.class); 
PlayList item = (PlayList) adapter.getItem(position); 
intent.putExtra("id", item.getId()); 
yourcontext.startActivity(intent); 
0

Sagen wir, Sie in einer nicht-Aktivitätsklasse 'goToMusicasPlaylistActivity()' Methode definieren.

public void goToMusicasPlaylistActivity(Context ctx) { 
    Intent intent = new Intent(ctx, MusicasPlaylistActivity.class); 
    PlayList item = (PlayList) adapter.getItem(position); 
    intent.putExtra("id", item.getId()); 
    ctx.startActivity(intent); 
} 
0

Sie können Kontext verwenden. In Ihrem Klassenkonstruktor können Sie Ihren Kontext initialisieren.

PlayList item = (PlayList) adapter.getItem(position); 
intent.putExtra("id", item.getId()); 
yourcontext.startActivity(intent); 
Verwandte Themen