如何从java文件更改XML按钮属性?
我试图从java文件中更改按钮上显示的文本,但运气不太好。在各种论坛上搜索了一段时间,并进行了谷歌搜索之后,我学会了创建一个新按钮,然后使用button.setText。然而,当我的应用程序突然结束,显示一条关于被迫退出的消息后,我决定进行一些调试。我发现问题出在这个Java类中如何从java文件更改XML按钮属性?,java,android,xml,debugging,Java,Android,Xml,Debugging,我试图从java文件中更改按钮上显示的文本,但运气不太好。在各种论坛上搜索了一段时间,并进行了谷歌搜索之后,我学会了创建一个新按钮,然后使用button.setText。然而,当我的应用程序突然结束,显示一条关于被迫退出的消息后,我决定进行一些调试。我发现问题出在这个Java类中 package com.KenanDeHart.thebasics; import android.app.Activity; import android.os.Bundle; import android.vie
package com.KenanDeHart.thebasics;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.content.Intent;
public class Showrole extends Activity {
public static int players;
public static int idx;
public static int[] playArray;
public static Button nextplayerButton =null;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.show_role);
Bundle extras = getIntent().getExtras();
Showrole.players = extras.getInt("PLAYERS");
for (idx = 0; idx < players ; ++idx){
display(idx);
++idx;
}
}
public void display(int idx){
Bundle extras = getIntent().getExtras();
playArray = extras.getIntArray("PLAYARRAY");
nextplayerButton = (Button) findViewById(R.id.nextplayer);
nextplayerButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
nextplayerButton.setText(playArray[Showrole.idx]);
}
});
}
@Override
protected void onPause() {
super.onPause();
}
public void next(){
Bundle extras = getIntent().getExtras();
Button button = (Button)findViewById(R.id.nextplayer);
button.setText("Next Player");
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
更具体地说,这条线
nextplayerButton.setText(playArray[Showrole.idx]);
当我按下continue时,一连串的事情发生了
11-30 12:47:28.770: E/AndroidRuntime(9770): at com.KenanDeHart.thebasics.Showrole$1.onClick(Showrole.java:51)
我真的不确定这里发生了什么。这是我第一次使用Java,我只使用了两天。我希望这个问题能解释得足够清楚,我向你保证我已经做了研究,但没有结果。我真的很感激任何人能给我的帮助。多谢各位 通常情况下,这应该是有效的:
setContentView(R.layout.activity_mail_sender);
int i = 2;
btn = (Button) findViewById(R.id.autoSendBtn);
btn.setText(""+i);
如果按钮已经存在于xml文件中,则不必在java代码中创建它。一定还有别的问题。如果只是更改按钮上显示的文本,请发布您的logcat错误 将此添加为实例变量(在所有方法之外) 获取onCreate()方法中按钮的引用
根据LogCat,在第42行的display()方法中有一个NullpointerException 原因:java.lang.NullPointerException 11-30 06:44:37.147: E/AndroidRuntime(6601):在 com.KenanDeHart.thebasics.Showrole.display(Showrole.java:42)
只需检查是否有未初始化的内容。好的,我知道发生了什么 数组“playArray”未从我的其他意图正确传递。我查看变量树,发现它实际上等于null。我通过发送区域的大小(这是上一个类中确定的变量)并在到达后创建数组来解决这个问题
谢谢大家的帮助。堆栈溢出的支持和帮助给我留下了深刻的印象。你能在这里发布你的logcat消息吗?我真的不理解将idx变量传递给display方法的用法,虽然你传递了它,但你使用了ShowRole.idx而不是传递的idx。为什么呢?尝试调试它,并检查您在
nextplayerButton.setText(playArray[Showrole.idx])行中获得的值代码>第51行。他想在java文件中更改。查看有关问题的全部内容。是的,@chintankhetiya,但他不想在java文件中创建按钮,但他还是尝试了。“我已经学会了创建一个新按钮,然后使用button.setText。”所以我建议您可以动态设置文本。没有必要动态创建它,除非他想。当我尝试使用您提供的代码添加实例变量时,我收到一个错误,上面写着“标记上的语法错误,删除这些标记”。嘿,Kumar,我找到了我收到该错误的原因,我在类之外添加实例变量,而不是在所有方法之外。谢谢你的帮助。我能够找到问题似乎发生的具体行,并且正在研究如何正确声明/初始化该行中的所有变量。
11-30 12:47:28.770: E/AndroidRuntime(9770): at com.KenanDeHart.thebasics.Showrole$1.onClick(Showrole.java:51)
setContentView(R.layout.activity_mail_sender);
int i = 2;
btn = (Button) findViewById(R.id.autoSendBtn);
btn.setText(""+i);
Button nextplayerButton =null;
nextplayerButton = (Button) findViewById(R.id.nextplayer);
nextplayerButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
nextplayerButton.setText(""+i);
}
});