在我的程序的一部分中,我在单击按钮时更改按钮的ID和文本。再次单击该按钮时,id和文本将恢复为先前的值。但是,我收到了错误。 (我在收到错误的行中添加了注释)。
我只需点击按钮即可更改文字。然后再次单击将其更改回旧值。有没有人有解决方案或更好的想法如何实现这一目标?
public void onClick(View v) {
switch(v.getId()){
case R.id.btn_start_again:
mPlayer.stop();
start.setText("Pause");
start.setId(R.id.pause);
break;
case R.id.pause:
start.setText("Pause"); //here it is not accepting pause
start.setId(R.id.btn_start_again);
break;
}
}
答案 0 :(得分:3)
我认为您不想更改id
的{{1}}。你正在做的是有Button
开始播放然后在播放时转为暂停。只需在xml的同一空间中放置两个Button
即可。从暂停Buttons
的{{1}}开始visibility
,然后检查功能中的Button
。
像
这样的东西gone
答案 1 :(得分:1)
有一种更好的方法可以做到。
根据状态为按钮设置不同的标签。
答案 2 :(得分:1)
以编程方式更改ID是一个坏主意,更好的解决方案是定义一个全局布尔值:
private boolean isSelected = false;
然后在你的onClick:
public void onClick(View v) {
if(isSelected==false){
mPlayer.stop();
start.setText("Pause");
isSelected=true;
}else{
start.setText("Pause");
isSelected=false;
}
答案 3 :(得分:1)
您无需更改按钮的ID,使用类似布尔标志的内容来跟踪按钮的状态:
boolean isPlaying = false;
public void onClick(View v) {
switch(v.getId()){
case R.id.btn_start_again:
if(isPlaying){
mPlayer.stop();
start.setText("Play");
isPlaying = !isPlaying;
}else{
//mPlayer.start() <--- you don't start it anywhere?
start.setText("Pause");
isPlaying = !isPlaying;
}
break;
}
}
答案 4 :(得分:1)
你可以只有一个按钮,可以处理不同的事件,并根据当前的按钮文本更改其行为。
public void onClick(View v) {
switch(v.getText()){
case "Pause":
mPlayer.stop();
start.setText("Play");
break;
case "Play":
start.setText("Pause");
mPlayer.play();
break;
}
}
或者您可以让按钮初始设置为触发1次点击事件,然后将按钮点击事件设置为第二次点击事件,反之亦然
public void onClickOne()
{
// do stuff
btn.OnClick = onClickTwo();
}
public void onClickTwo()
{
// do stuff
btn.OnClick = onClickOne
}
答案 5 :(得分:1)
我最终以这种方式做到了:
String value=start.getText().toString();
if(value.equals("Start")){
start.setText("Pause");
}
else if(value.equals("Pause")){
start.setText("Start");
}