0

Android アプリ (Eclipse の Java) があり、Shift メソッドを使用してキーボードのいくつかのボタンのテキストを変更したいと考えています。同様の質問で誰もが言うのと同じように、テキストビューのテキストを変更するために行ったのと同じコードを実装しましたが、何らかの理由で機能しません。何らかの理由で、他のボタン機能をテストした後、ボタンのプロパティを変更するのが気に入らないことがあると判断しました。プロジェクトのクリーニングを試みましたが、役に立ちませんでした。呼び出し例外が発生し続けます。関連するコードは次のとおりです。

public class MainActivity extends Activity {

    boolean shift = true;
    static Vector<String> answer = new Vector<String>(1, 1);
    static int ansLength = 0;
    private TextView answerbox;
    private Button a;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        initializeButtons();
        setContentView(R.layout.activity_main);
        answerbox = (TextView) findViewById(R.id.answerbox);

    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

    public void initializeButtons() {
        a = (Button) findViewById(R.id.a);

    }

    public void typeKey(View sender) {
        Button pressed = (Button) sender;
        answer.add(ansLength, (String) pressed.getText());
        //answerbox.setText("test string");
        ansLength++;
        StringBuilder stringBuilder = new StringBuilder();
        for (String string : answer) {
            stringBuilder.append(string);
        }

        answerbox.setText(stringBuilder.toString());

    }

    public void backSpace(View sender) {

        answer.remove(ansLength - 1);
        ansLength--;
        StringBuilder stringBuilder = new StringBuilder();
        for (String string : answer) {
            stringBuilder.append(string);
        }
        answerbox.setText(stringBuilder.toString());
    }

    public void shift(View sender) {
        if (shift == true) {
            shift = false;
            a.setText("l");
        }
    }
} 

以下の XML:

<Button
            android:id="@+id/a"
            style="?android:attr/buttonStyleSmall"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentBottom="true"
            android:layout_alignParentLeft="true"
            android:text="A" 
            android:onClick="typeKey"/>
<Button
            android:id="@+id/shift1"
            style="?android:attr/buttonStyleSmall"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentLeft="true"
            android:layout_alignParentTop="true"
            android:text="^"
            android:textSize="24sp"
            android:onClick="shift" />
4

1 に答える 1

1

まず、オブジェクトの前にレイアウト データがないため、 findViewById()ininitializeButtons()を後で呼び出す必要があります。setContentView()ActivitysetContentView()

したがって、ステートメントを次のように移動します。

    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    initializeButtons(); // Move this.
    answerbox = (TextView) findViewById(R.id.answerbox);

次に、特別な目的以外で Java を使用しないことをお勧めします。VectorArrayList代わりに使用してください。Java のベクトルは遅く、ほとんど非推奨です。互換性の問題のために利用可能です。

static Vector<String> answer = new Vector<String>(1, 1);

に置き換える必要があります

static ArrayList<String> answer = new ArrayList<String>(1, 1);

同期の問題がある場合は (今はこの問題はないと思います)、 Collections.synchronizedList() メソッドを使用してください。

于 2013-08-07T06:27:02.200 に答える