-4

複数のボタンがあり、それらを押すとユーザーに情報が表示され(入力を求めます)、コードで使用できるように、入力ボタンが押されて入力が取得されるまでプログラムを待機させます。これを行うための最良の方法は何ですか?

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 に答える