所以我有一个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" />
答案 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?