У меня есть отдельный класс для onClickListener, и я пытаюсь раздуть представление, чтобы изменить текст, щелкнув здесь код активности
playNext.setOnClickListener(new ExternalOnClickListener(this));
playPrevious.setOnClickListener(new ExternalOnClickListener(this));
Компоновка
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".NowPlaying"
android:background="#000">
<ImageView
android:id="@+id/album_cover"
style="@style/nowPlaying_background"/>
<include layout="@layout/top_buttons"/>
<TextView
android:id="@+id/album"
style="@style/nowPlaying_albumName"
android:text="album name"/>
<TextView
android:id="@+id/song"
android:text="song name"
style="@style/nowPlaying_songName"/>
<LinearLayout
android:id="@+id/controllers"
style="@style/controllers_linearLayout">
<View
style="@style/nowPlaying_controllers_view_divider"/>
<Button
android:id="@+id/skip_previous"
style="@style/previous_song_btn"
android:text="" />
<Button
android:id="@+id/play_pause"
style="@style/play_pause"/>
<Button
android:id="@+id/skip_next"
style="@style/previous_song_btn.next_song_btn"
android:text=""/>
</LinearLayout>
</RelativeLayout>
Класс
public class ExternalOnClickListener implements View.OnClickListener {
private Context context;
private SharedPreferenceConfig preferenceConfig;
private int songIndex = 0;
private int nextSongIndex = 0;
private int previousSongIndex = 0;
private String songName, curSong;
public ExternalOnClickListener(Context context) {
this.context=context;
preferenceConfig = new SharedPreferenceConfig(context);
}
@Override public void onClick(View v) {
switch (v.getId()){
case R.id.skip_next:
int songIndex = 0;
int nextSongIndex = 0;
String songName = preferenceConfig.readSongName();
for(Songs s : MainActivity.songs) {
boolean resultOfComparison= songName.equals(s.getSong());
if(resultOfComparison){
int indexPlusOne = songIndex+1;
if((MainActivity.songs.size()) == indexPlusOne){
songIndex = 0;
nextSongIndex =0;
}
else{
nextSongIndex = songIndex + 1;
}
String nextSongName = MainActivity.songs.get(nextSongIndex).getSong();
String nextAlbumName = MainActivity.songs.get(nextSongIndex).getAlbum();
int nextAlbumCover = MainActivity.songs.get(nextSongIndex).getAlbumCover();
LayoutInflater inflater = LayoutInflater.from(context);
View vi = inflater.inflate( R.layout.activity_now_playing, null );
TextView songTextView = (TextView) vi.findViewById(R.id.song);
TextView albumTextView = (TextView) vi.findViewById(R.id.album);
ImageView albumCover = (ImageView) vi.findViewById(R.id.album_cover);
songTextView.setText(nextSongName);
albumTextView.setText(nextAlbumName);
albumCover.setImageResource(nextAlbumCover);
preferenceConfig.writeSongName(nextSongName);
Toast.makeText(context, nextSongName, Toast.LENGTH_SHORT).show();
break;
}
songIndex++;
}
break;
}
}
}
Тост отображается правильно, и я получаю правильное название песни, но текстовые представления и изображение не меняются, и я не получаю никаких ошибок. Я пытался заменить код инфлятора этой строкой
LayoutInflater inflater = (LayoutInflater) context.getSystemService( Context.LAYOUT_INFLATER_SERVICE );
Но все тот же результат. Как я могу правильно надуть макет из такого класса?