长期观察者,第一次作家:P
我遇到了这个问题:
我似乎无法改变任何与我的playSoundThread中的android布局有关的内容。 在这个例子中,我使用EventListeners。我已经尝试过简单的方法。我通过ScrollView,以便线程可以更改它。但是当它发生时,线程立即停止。即使我使用EventListeners,也会出现同样的问题。 更改变量和发布日志信息可以正常工作,但不能布局对象。
首先,我想从Thread的run()方法中滚动HorizontalScrollView。 第二种情况是,如果线程结束,我想发射“我已经完成”-Event并更改ImageButton的图像和功能
这是线程的run() - 方法
public void run() {
if(this.playbackPosition < rhythm.tracks.get(0).sounds.size()) {
for (Track t : rhythm.tracks) {
if (t.sounds.get(this.playbackPosition).equals("1")) {
this.sp.play(t.SoundID, 1, 1, 1, 0, 1);
}
}
this.playbackPosition++;
if ( this.playbackPosition >= (this.scrollIndex*(192/this.zoom)) ){
this.scrollIndex++;
//Here I wanna fire the "Scroll" event
for(ScrollListener sl : scrollListeners){
sl.update(scrollPositions[scrollIndex]);
}
}
}
//This is the point where the playback is finished and the event to change a button is fired
else {
tmpListener.update();
}
}
}
OnPlaybackFinishedListener的声明可以在Player类中找到,它是PlaySoundThread的父级:
public void addOnPlaybackFinishedListener(){
tmpListener = new OnPlaybackFinishedListener() {
@Override
public void update() {
scheduledExecutorService.shutdown();
//this is a seconds Listener, which was implemented to test, if the problem still occurs with a little listener chain
shutdownListener.update();
}
};
}
public void addShutdownListener(OnExecutorShutdown sl){
this.shutdownListener = sl;
}
这是MainActivity的一部分,它是Player的父类,并添加了关闭监听器和ScrollListener:
awesomePlayer.addScrollListener(new ScrollListener(){
public void update(int position){
Log.i("ScrollListener update()","Running ScrollTo( "+position+", "+VIEW_rhythmscroll.getScrollY()+")");
VIEW_rhythmscroll.scrollTo(position, VIEW_rhythmscroll.getScrollY());
}
});
awesomePlayer.addOnPlaybackFinishedListener();
awesomePlayer.addShutdownListener(new OnExecutorShutdown() {
@Override
public void update() {
// TODO Auto-generated method stub
//This method changes the Pause Button to a Play Button with a new OnClickListener and a new Picture
BUTTON_STOP.performClick();
}
});
有人可以帮忙吗?还有另一种方法可以避免这个问题吗?我正在开发Android 2.2 甚至可以从线程中访问UI元素吗?
提前致谢:)