我有多个按钮,当按下它们时,它们向用户显示信息(要求输入)然后我希望程序等到按下回车按钮以获得输入,这样它就可以在代码中使用。对我来说这是最好的方式吗?
public class MainActivity extends Activity implements OnClickListener {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button enter = (Button) findViewById(R.id.enter);
Button line = (Button) findViewById(R.id.line);
Button arc = (Button) findViewById(R.id.arc);
line.setOnClickListener(this);
enter.setOnClickListener(this);
arc.setOnClickListener(this);
}
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
TextView vector = (TextView) findViewById(R.id.point);
TextView index = (TextView) findViewById(R.id.index);
TextView info = (TextView) findViewById(R.id.info);
EditText cl = (EditText) findViewById(R.id.editText1);
DrawingUtils call = new DrawingUtils();
switch (v.getId()) {
case R.id.line:
info.setText("Input X,Y,Z");
// This Is Where the Wait Function Will GO till enter is pressed
vector.setText(call.addVertice());
index.setText("1");
break;
case R.id.enter:
String In = cl.getText().toString();
call.setInputCoords(In);
break;
case R.id.arc:
info.setText("Enter Vertice1 ");
// Code for entering Vertice1(Also has wait function)
info.setText("Enter Vertice2");
// Code for entering Vertice2(Also has wait function)
info.setText("Enter Height");
//Code for entering Height(Also has wait function)
}
}
}
答案 0 :(得分:1)
我认为你应该编辑这个问题,以澄清你的要求。
就像你被告知的那样,主线程(也称为GUI线程)不应该等待。无论如何,如果我理解你的情况,这里并不是真的需要。您只需更改实现,而不是等待',在从用户收到输入并验证后,将调用您要应用的操作。
您的活动可以为您的应用所需的每个输入设置一个布尔标记,以便按下此按钮时执行此操作。
boolean firstInput, secondInput, thirdInput;
对于每个输入,您都有一个验证方法:
private validateInput(View v)
{
if (v.getText() != null){ //...and any other required rule to match for your action to function properly
firstInput = true; //depends on the input you are checking.
}
}
您可以在输入changes.
中的值时调用validateInput()在按钮的on上点击:
if (firstInput && secondInput && thirdInput && everythingElseIsOk){
//Energize!
...
} else {
//One of the inputs isn't happy. Prompt the user to fix this,
//throw an exception or do nothing.
return;
}
另外,我认为没有理由提出:
TextView vector = (TextView) findViewById(R.id.point);
TextView index = (TextView) findViewById(R.id.index);
TextView info = (TextView) findViewById(R.id.info);
EditText cl = (EditText) findViewById(R.id.editText1);
在onClick处理程序中。仅仅初始化一次更合适,例如在onCreate()
答案 1 :(得分:-1)
这个问题非常朦胧!假设在UI上有3个按钮,它们会进行某种计算,提示用户输入,然后在按下输入按钮时使用所有这些计算。
1>在屏幕上保留一个单独的“提交”按钮。因此,当用户完成所有计算时,他可以“提交”它。 2>如果计算是长时间运行的(超过5秒),则将其放在一个单独的线程中,这样它就不会冻结UI并给出ANR。
希望这会有所帮助。如果不是,请将问题更清楚。