-4

我有多个按钮,当按下它们时,它们会向用户显示信息(要求输入),然后我希望程序等到按下 Enter 按钮以获取输入,以便可以在代码中使用它。我这样做的最好方法是什么?

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)

    }

}

}

4

2 回答 2

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.
    }
}

当输入中的值发生变化时,您可以调用 validateInput() 。

然后,在按钮的 onClick 上:

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()

于 2013-06-20T08:29:21.430 回答
-1

这个问题真的很朦胧!我假设 UI 上有 3 个按钮,它们会进行某种计算,提示用户输入,然后在按下回车按钮时使用所有这些计算。

1>在您的屏幕上保留一个单独的“提交”按钮。所以当用户完成所有计算时,他可以“提交”它。2>如果计算是长时间运行的(超过 5 秒),请将其放在单独的线程中,这样它就不会冻结 UI 并给出 ANR。

希望这会有所帮助。如果没有,请让问题更清楚。

于 2013-06-20T10:35:38.437 回答