我想在按钮关闭时用字符填充TextView 我写了这段代码,但它只写了一个字符?
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
final Button b = (Button) findViewById(R.id.btn);
final TextView tv =(TextView) findViewById(R.id.txt1);
b.setOnTouchListener(new OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_DOWN){
String s = tv.getText().toString();
tv.setText( s + "E");
return false;
}
return false;
}
});
}
如何在按钮状态停止时用字符填充textview?
答案 0 :(得分:1)
好的..这是解决方案。尝试使用Handler
。
Button b = (Button) findViewById(R.id.btn);
final TextView tv = (TextView) findViewById(R.id.txt1);
b.setOnTouchListener(new OnTouchListener() {
private Handler mHandler;
@Override
public boolean onTouch(View v, MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_DOWN) {
if (mHandler != null)
return true;
mHandler = new Handler();
mHandler.postDelayed(mAction, 500);
return false;
} else if (event.getAction() == MotionEvent.ACTION_UP) {
if (mHandler == null)
return true;
mHandler.removeCallbacks(mAction);
mHandler = null;
return false;
}
return false;
}
Runnable mAction = new Runnable() {
@Override
public void run() {
String s = tv.getText().toString();
tv.setText(s + "E");
mHandler.postDelayed(this, 500);
}
};
});
Reference。 我希望这会对你有所帮助。
答案 1 :(得分:1)
你可以这样做:
创建一个布尔成员变量,用作填充textview的标志。在触摸下设置boolean为true,并启动一个设置文本的runnable,然后启动另一个runnable。这会创建一个循环。 在on up up中,将boolean设置为false,循环将停止。像这样(未经测试):
private boolean mFillTextView = false;
@Override
public boolean onTouch(View v, MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_DOWN){
mFillTextView = true;
Handler mHandler= new Handler();
mHandler.postDelayed(new MyRunnable(), 300);
return false;
}
if (event.getAction() == MotionEvent.ACTION_UP){
mFillTextView =false;
}
return false;
}
});
class MyRunnable implements Runnable{
@Override
public void run() {
if (mFillTextView){
mTextView.setText(mTextView.getText()+"a");
mHandler.postDelayed(new MyRunnable(), 300);
})};
}
答案 2 :(得分:1)
您可以在收到TextView
事件时启动填充MotionEvent.ACTION_DOWN
的循环线程
然后,您可以使用MotionEvent.ACTION_UP
事件来阻止该线程运行
在线程内部,您需要先调用UI线程,然后才能修改TextView