按钮属性不会发生变化

时间:2013-08-07 06:04:41

标签: java android eclipse

所以我有一个Android应用程序(Eclipse中的java),我想通过shift方法更改键盘上某些按钮的文本。我实现了与更改textview文本相同的代码,就像所有人对类似问题所说的一样,但由于某种原因它无法正常工作。出于某种原因,在测试了其他按钮功能之后,我已经确定了我不喜欢改变按钮的任何属性。试过清理项目,没有帮助。继续获得调用异常。以下是相关代码:

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" />

1 个答案:

答案 0 :(得分:1)

首先,findViewById()中的initializeButtons()应在setContentView()之后调用,因为在Activity之前setContentView()对象中没有布局数据

因此,请按以下方式移动语句:

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

其次,除了特殊用途之外,我建议您不要在Java中使用Vector 。请改用ArrayList。 Java中的向量很慢,几乎已弃用。由于兼容性问题,它只是可用的。

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

应该替换为

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

如果您有同步问题,(我认为您现在没有此问题),请使用Collections.synchronizedList()方法:Why is Java Vector class considered obsolete or deprecated?