我真的被困在這裏,我是編程新手。 我在我的音樂應用程序中取得了很多成績,但是現在我使用OnClickListener在listViewAdapter中創建了一個按鈕,並且想要在MainActivity中將歌曲添加到favList ArrayList。通過這段代碼,我可以得到我想要的歌曲,但是我怎樣才能將它放入列表中?Android:如何將數據從適配器傳遞到OnClickListener的主要活動
這裏是我此代碼:
class SongAdapter extends ArrayAdapter<Song> {
SongAdapter(Context context, ArrayList<Song> songs) {
super(context, 0, songs);
}
@NonNull
@Override
public View getView(final int position, View convertView, @NonNull ViewGroup parent) {
// Check if the existing view is being reused, otherwise inflate the view
View listItemView = convertView;
if (listItemView == null) {
listItemView = LayoutInflater.from(getContext()).inflate(R.layout.list_item, parent, false);
}
Song currentSong = getItem(position);
TextView songNameTextView = (TextView) listItemView.findViewById(R.id.song_name);
assert currentSong != null;
songNameTextView.setText(currentSong.getSongName());
TextView songArtistTextView = (TextView) listItemView.findViewById(R.id.song_artist);
songArtistTextView.setText(currentSong.getArtist());
ImageButton addToPlaylistButton = (ImageButton) listItemView.findViewById(R.id.addToPlaylist);
addToPlaylistButton.setTag(position);
addToPlaylistButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
int position = (Integer) view.getTag();
Song song = getItem(position);
Toast.makeText(view.getContext(), song.getAlbum().toString(), Toast.LENGTH_LONG).show();
}
});
return listItemView;
} }
這裏是從我的MainActivity的部分:
final ArrayList<Song> songs = new ArrayList<>(); final ArrayList<Song> favSongs = new ArrayList<>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.song_list);
//Setup the Listview for the Songs
SongAdapter adapter = new SongAdapter(this, songs);
ListView listView = (ListView) findViewById(R.id.list);
listView.setItemsCanFocus(true);
listView.setAdapter(adapter);
}
非常感謝你,我實現了你的代碼,並處理了所有我得到的錯誤,現在它真的起作用了。我仍然有一個問題,我從來沒有在界面上使用過你的第一塊代碼,那會怎麼做? 我應該也發佈我的完整解決方案代碼在這裏爲其他人嗎?這是我的第一個問題。 – Tyrone3
@ Tyrone3閱讀這裏:[什麼是接口](https://docs.oracle.com/javase/tutorial/java/concepts/interface.html)。不久它就是一個合同,該類應該實施。類可以實現許多合約。在活動中,我創建了該接口的匿名實例。如果我的答案符合您的所有需求,則不應發佈完整的解決方案。儘量讓你的問題/答案不那麼具體,適用於廣泛的讀者。 – Beloo