Android - 在 onClick 操作期间隐藏按钮
Posted
技术标签:
【中文标题】Android - 在 onClick 操作期间隐藏按钮【英文标题】:Android - Hide button during an onClick action 【发布时间】:2016-12-04 16:52:36 【问题描述】:我需要在这样的 onClick 操作期间隐藏一个按钮:
public void onClick(View view)
switch (view.getId())
case R.id.button1:
Button button2 = (Button) findViewById(R.id.button2);
button2.setVisibility(View.GONE);
//Some methods
//...
button2.setVisibility(View.VISIBLE);
break;
但可见性仅在 onClick 之后发生变化,我该怎么做才能隐藏按钮 在 onClick 期间?
谢谢
【问题讨论】:
如果您想在用户单击另一个视图时隐藏按钮/视图,那么您必须实现onTouchListener
而不是 onClickListener
我想在执行“某些方法”时隐藏按钮。
【参考方案1】:
你可以尝试如下:
@Override
public boolean onTouch(View v, MotionEvent event)
switch(v.getId())
case R.id.button1:
if(event.getAction() == MotionEvent.ACTION_DOWN)
Button button2 = (Button) findViewById(R.id.button2);
button2.setVisibility(View.GONE);
return true;
else if(event.getAction() == MotionEvent.ACTION_UP)
// some methods
Button button2 = (Button) findViewById(R.id.button2);
button2.setVisibility(View.VISIBLE);
return true;
return false;
【讨论】:
【参考方案2】:当然,因为你在同一个线程中执行所有操作,你可能会注意到可见性的变化,试试这个:
public void onClick(View view)
switch (view.getId())
case R.id.button1:
final button2 = (Button) findViewById(R.id.button2);
button2.setVisibility(View.GONE);
setVisibility(GONE);
new Thread(new Runnable()
@Override
public void run()
//your work
runOnUiThread(new Runnable() //resetting the visibility of the button
@Override
public void run()
//manipulating UI components from outside of the UI Thread require a call to runOnUiThread
button2.setVisibility(VISIBLE);
);
).start();
break;
【讨论】:
行得通!另一个问题,总共有 3 个线程,一个用于将可见性设置为 GONE,另一个用于完成我的工作,最后一个用于再次设置可见性。是否可以在 2 个线程中执行相同的操作? 实际上只有 2 个线程,UI 线程和您工作的第二个线程,runOnUiThread
不会创建新线程,而只是将其 run
方法中的代码发布到用户界面线程。来自关于runOnUiThread
方法的文档:在 UI 线程上运行指定的操作。如果当前线程是 UI 线程,则立即执行该操作。如果当前线程不是 UI 线程,则将 action 发布到 UI 线程的事件队列中。以上是关于Android - 在 onClick 操作期间隐藏按钮的主要内容,如果未能解决你的问题,请参考以下文章
如何在“onclick”事件期间加载外部Javascript文件?