Java 按钮属性赢得';不变
所以我有一个android应用程序(Eclipse中的java),我想通过shift方法更改键盘上一些按钮的文本。我实现了与更改textview文本相同的代码,就像每个人在类似问题上说的一样,但由于某些原因,它无法工作。出于某种原因,在测试了其他按钮功能后,我确定更改按钮的任何属性都有一些不喜欢的地方。试图清理项目,但没有帮助。继续获取调用异常。以下是相关代码:Java 按钮属性赢得';不变,java,android,eclipse,Java,Android,Eclipse,所以我有一个android应用程序(Eclipse中的java),我想通过shift方法更改键盘上一些按钮的文本。我实现了与更改textview文本相同的代码,就像每个人在类似问题上说的一样,但由于某些原因,它无法工作。出于某种原因,在测试了其他按钮功能后,我确定更改按钮的任何属性都有一些不喜欢的地方。试图清理项目,但没有帮助。继续获取调用异常。以下是相关代码: public class MainActivity extends Activity { boolean shift = t
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它是减少锅炉板代码并使初始化不易出错的一个伟大工具。它甚至会告诉你是否有东西丢失或弄糟了。