私はフラグメントを持ち、親アクティビティ(次のコードブロックを参照)と通信するためにインタフェースを使用します。私は基本的な例を含んでいますが、Spotify OnPlaybackEventから関数updateTextView()を呼び出すときにTextViewがアクティビティを更新していないという問題があります。 Handlersとrunonuithreadを試してみましたが、何も動かないようです。Android:アクティビティのTextViewテキストをフラグメントから更新することはできません
これは私の断片である:
public class PlayerFragment extends Fragment implements SpotifyPlayer.NotificationCallback, ConnectionStateCallback {
public ImageView playButton;
public TrackOperations trackOperationsCallback;
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
rootView = inflater.inflate(R.layout.player_fragment, container, false);
playButton = (ImageView) rootView.findViewById(R.id.playButton);
playButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
//THIS WORKS!
trackOperationsCallback.updateTextView();
}
});
return rootView;
}
@Override
public void onPlaybackEvent(PlayerEvent playerEvent) {
if(playerEvent.equals(kSpPlaybackNotifyTrackDelivered)){
//THIS IS PRINTED WHEN A SONG ENDS
Log.d(spoty.TAG, "Player: Event " + playerEvent);
//BUT THIS DONT WORK
trackOperationsCallback.updateTextView();
}
}
public interface TrackOperations {
public void updateTextView();
}
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
try {
trackOperationsCallback = (TrackOperations) activity;
} catch (ClassCastException e) {
throw new ClassCastException(activity.toString() + " must implement TrackOperations");
}
}
}
これは私の親アクティビティです:
public class QueueActivity extends Activity implements PlayerFragment.TrackOperations {
private TextView queueSong;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
queueSong = (TextView) findViewById(R.id.queueSong);
}
@Override
public void updateTextView(){
//THIS IS PRINTED IN BOTH CASES
Log.d(spoty.TAG, "Called!");
//THIS WORKS IF IS CALLED FROM THE BUTTON CLICK OF THE FRAGMENT
//BUT DONT WORK WHEN CALLED FROM THE EVENT IN FRAGMENT
queueSong.setText("ANY RANDOM TEXT");
}
}
私はこれで日苦労してきたので、何かアドバイスは大歓迎されます。前もって感謝します。
'onPlaybackEvent'スレッドが呼び出されるのはどうですか? –
updateCurrentTrack()で実際に何をしていますか?問題はそのメソッドのコードかもしれません。 –
updateCurrentTrack()= updateTextField()= updateTextView()? あなたは誤って同じメソッドに異なるメソッド名を使用していますか?または、インターフェイスに複数のメソッドがありますか? –