Java 按钮属性赢得';不变

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

所以我有一个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");
        }
    }
} 
公共类MainActivity扩展活动{
布尔移位=真;
静态向量答案=新向量(1,1);
静态长度=0;
私人文本视图应答器;
专用按钮a;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
初始化按钮();
setContentView(R.layout.activity_main);
answerbox=(TextView)findViewById(R.id.answerbox);
}
@凌驾
公共布尔onCreateOptions菜单(菜单){
//为菜单充气;这会将项目添加到操作栏(如果存在)。
getMenuInflater().充气(R.menu.main,menu);
返回true;
}
public void initializeButtons(){
a=(按钮)findViewById(R.id.a);
}
public void typeKey(查看发送方){
按下按钮=(按钮)发送器;
add(ansLength,(String)按下.getText());
//answerbox.setText(“测试字符串”);
ansLength++;
StringBuilder StringBuilder=新的StringBuilder();
for(字符串:答案){
追加(字符串);
}
answerbox.setText(stringBuilder.toString());
}
公共无效退格(查看发件人){
回答:移除(长度-1);
长度--;
StringBuilder StringBuilder=新的StringBuilder();
for(字符串:答案){
追加(字符串);
}
answerbox.setText(stringBuilder.toString());
}
公共无效移位(查看发送方){
if(shift==true){
移位=假;
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" />

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

因此,请按如下方式移动声明:

    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    initializeButtons(); // Move this.
    answerbox = (TextView) findViewById(R.id.answerbox);
第二,我想建议您不要在Java中使用
Vector
,除非用于特殊目的。改用
ArrayList
。Java中的Vector速度很慢,几乎被弃用。它只是因为兼容性问题才可用

static Vector<String> answer = new Vector<String>(1, 1);
静态向量答案=新向量(1,1);
应替换为

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

如果您有同步问题,(我不认为您现在有这个问题),那么使用Cuff.SimuleDistList:()方法:

您是否在更改属性之后无效视图?考虑使用ANDROIDANNETMENT它是减少锅炉板代码并使初始化不易出错的一个伟大工具。它甚至会告诉你是否有东西丢失或弄糟了。