设置为 null 后如何将 onItemClickListener 重置为 true?
How to reset back onItemClickListener to true after been set to null?
我在我的列表视图中设置了onItemClickListener,项目包括视频、图像和文本。当用户在列表视图中点击视频时,它播放正常。现在,在 playVideo() 方法中,我将列表视图设置为 null,这样用户在播放时不应与视频互动。
我想 regain/reset 返回 onitemClicklisterner 到 true 之后视频播放完毕。我该如何实现,请协助。
private void playVideo() {
listOfMessages.setOnItemClickListener(null);
videoText.setVideoURI(Uri.parse(chattVideo));
frameText.setVisibility(View.VISIBLE);
imageVideo.setVisibility(View.INVISIBLE);
videoText.setVisibility(View.VISIBLE);
btnText.setVisibility(View.GONE);
try {
videoText.setMediaController(mediaControllerText);
mediaControllerText.show();
videoText.seekTo(1);
videoText.pause();
videoText.stopPlayback();
videoText.seekTo(1);
videoText.resume();
progressBarMessage.setVisibility(View.GONE);
videoText.start();
videoText.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mp) {
mp.start();
mp.setOnVideoSizeChangedListener(new MediaPlayer.OnVideoSizeChangedListener() {
@Override
public void onVideoSizeChanged(MediaPlayer mp, int width, int height) {
progressBarMessage.setVisibility(View.GONE);
mp.start();
}
});
}
});
videoText.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mp) {
listOfMessages.setOnItemClickListener(this);// if I do like this android studio complains it cannot be applied inside MediaPlayer.OnCompletionListener
btnText.setVisibility(View.VISIBLE);
}
});
videoText.setOnErrorListener(new MediaPlayer.OnErrorListener() {
@Override
public boolean onError(MediaPlayer mp, int what, int extra) {
FancyToast.makeText(getContext(),"Something went wrong!",FancyToast.LENGTH_LONG,
FancyToast.ERROR,R.drawable.wheel,false).show();
return false;
}
});
} catch (Exception e) {
PBar.setVisibility(View.GONE);
FancyToast.makeText(getContext(),e.getMessage(),
FancyToast.LENGTH_LONG,FancyToast.WARNING,R.drawable.wheel,false).show();
}
}
我会使用一个布尔值,您可以在视频播放时将其设置为 true/false,并且根据其状态,onClickListener 可以做出不同的反应。
编辑:
或使用button.setClickable(false);
(必须在.setOnClickListener()
之后使用。
或者button.setEnabled(false);
(这个甚至可以用在.setOnClickListener()
之前。
这两种方法的优点是按钮动画也会被禁用,如果您将多个可点击对象堆叠在一起,它们可能会更好地工作。
它们在视图 class 中,也可以在 ListView 上调用(但我没有尝试 "live")。
boolean isPlaying = false;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button button = findViewById(R.id.button);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(isPlaying){
//do stuff
} else {
//do someting else
}
}
});
}
您可以创建如下方法来执行所需的操作
这是伪代码
private void setListener(boolean isPlaying){
if(isPlaying){
your_listview.setOnItemClickListener(null);
}
else{
your_listview.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
//YOUR CODE
}
});
}
}
现在,只需在视频播放时调用 setListener(true)
否则
setListener(false)
我在我的列表视图中设置了onItemClickListener,项目包括视频、图像和文本。当用户在列表视图中点击视频时,它播放正常。现在,在 playVideo() 方法中,我将列表视图设置为 null,这样用户在播放时不应与视频互动。
我想 regain/reset 返回 onitemClicklisterner 到 true 之后视频播放完毕。我该如何实现,请协助。
private void playVideo() {
listOfMessages.setOnItemClickListener(null);
videoText.setVideoURI(Uri.parse(chattVideo));
frameText.setVisibility(View.VISIBLE);
imageVideo.setVisibility(View.INVISIBLE);
videoText.setVisibility(View.VISIBLE);
btnText.setVisibility(View.GONE);
try {
videoText.setMediaController(mediaControllerText);
mediaControllerText.show();
videoText.seekTo(1);
videoText.pause();
videoText.stopPlayback();
videoText.seekTo(1);
videoText.resume();
progressBarMessage.setVisibility(View.GONE);
videoText.start();
videoText.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mp) {
mp.start();
mp.setOnVideoSizeChangedListener(new MediaPlayer.OnVideoSizeChangedListener() {
@Override
public void onVideoSizeChanged(MediaPlayer mp, int width, int height) {
progressBarMessage.setVisibility(View.GONE);
mp.start();
}
});
}
});
videoText.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mp) {
listOfMessages.setOnItemClickListener(this);// if I do like this android studio complains it cannot be applied inside MediaPlayer.OnCompletionListener
btnText.setVisibility(View.VISIBLE);
}
});
videoText.setOnErrorListener(new MediaPlayer.OnErrorListener() {
@Override
public boolean onError(MediaPlayer mp, int what, int extra) {
FancyToast.makeText(getContext(),"Something went wrong!",FancyToast.LENGTH_LONG,
FancyToast.ERROR,R.drawable.wheel,false).show();
return false;
}
});
} catch (Exception e) {
PBar.setVisibility(View.GONE);
FancyToast.makeText(getContext(),e.getMessage(),
FancyToast.LENGTH_LONG,FancyToast.WARNING,R.drawable.wheel,false).show();
}
}
我会使用一个布尔值,您可以在视频播放时将其设置为 true/false,并且根据其状态,onClickListener 可以做出不同的反应。
编辑:
或使用button.setClickable(false);
(必须在.setOnClickListener()
之后使用。
或者button.setEnabled(false);
(这个甚至可以用在.setOnClickListener()
之前。
这两种方法的优点是按钮动画也会被禁用,如果您将多个可点击对象堆叠在一起,它们可能会更好地工作。 它们在视图 class 中,也可以在 ListView 上调用(但我没有尝试 "live")。
boolean isPlaying = false;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button button = findViewById(R.id.button);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(isPlaying){
//do stuff
} else {
//do someting else
}
}
});
}
您可以创建如下方法来执行所需的操作
这是伪代码
private void setListener(boolean isPlaying){
if(isPlaying){
your_listview.setOnItemClickListener(null);
}
else{
your_listview.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
//YOUR CODE
}
});
}
}
现在,只需在视频播放时调用 setListener(true)
否则
setListener(false)