繁体   English   中英

如何从Custom AlertDialog调用MainActivity类?

[英]How to call a MainActivity class from Custom AlertDialog?

我在MainActivity中有一个名为PlaySong() ,并且从MainActivity中,我正在像这样调用自定义AlertDialog类。

SongListDialog songlistDialog = new SongListDialog(this, songsList);
songlistDialog.show();

如何从SonglistDialog内部的歌曲列表中调用PlaySong()。 目前,我拥有此ListView,并且可以使用以下代码跟踪任何歌曲的点击情况:

@OnClick(R.id.card_view)
void onClick() {
     Song song = songs.get(getAdapterPosition());
     dialog.dismiss();

    // here I want to call PlaySong() method which is inside MainActivity
}

任何想法如何做到这一点?

您可以使用回调。

public interface OnSongSelectedListener{
    void onSongSelected(Song song);
}


// Then in your Activity
SongListDialog songlistDialog = new SongListDialog(this, songsList, songSelectedListener);
songlistDialog.show();

理想情况下,活动本身应实现该接口。 所以songSelectedListener将是MainActivity.this

然后在onClick中执行以下操作:

void onClick() {
    Song song = songs.get(getAdapterPosition());
    listener.onSongSelected(song); // Return the selected song
    dialog.dismiss();

    // here I want to call PlaySong() method which is inside MainActivity
}

避免泄漏的最佳方法是创建一个侦听器接口

public interface SongListListener {
   void playSong(Song song);
}

然后在你的SongListDialog构造函数上

private final SongListListener mListener;

public SongListDialog(SongListListener listener, ...) {
    mListener = listener;
}


@OnClick(R.id.card_view)
void onClick() {
     Song song = songs.get(getAdapterPosition());
     dialog.dismiss();

    // notify listener
    mListener.PlaySong(song);
}

最后在您的MainActivity中实现SongListListener

public class MainActivity extends Activity implements SongListListener  {
   //...

  @Override
   void playSong(Song song){
   //do whatever you want with the song here
   }
//...
}

由于您要在new SongListDialog(this, songsList)中传递MainActivity new SongListDialog(this, songsList)可以通过强制转换直接在其上调用playSong

public SongListDialog(Context ctx, ...) {
    ((MainActivity) ctx).playSong();
}

您想从活动中传递适配器中的上下文并使用该上下文

((MainActivity)上下文).playSong();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM