我有一个简单的Android应用程序,我想在其中获取用户输入(String)。所以我有一个" EditText"框和"输入"按钮。当用户键入内容并点击Enter时,我正在尝试显示该文本,只要我在' setOnClickListener()'中执行所有操作,它就会正常工作。功能。字符串变量在函数外部变为null。这是我的代码:
public class MainActivity extends AppCompatActivity {
Button hitButton;
EditText userInput;
String myVariable;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
hitButton = (Button)findViewById(R.id.button);
hitButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
userInput = (EditText)findViewById(R.id.userInput);
myVariable= userInput.getText().toString();
}
});
TextView textView = (TextView)findViewById(R.id.textView);
textView.setText(myVariable); // THIS IS THE PROBLEM
// IT DISPLAYS NULL WHICH MEANS THAT String myVariable = null
}
}
如果我将TextView.setText(myVariable)放在setOnClickListener函数中,那么它可以完美地工作但在函数外部,myVariable变为null。我需要在函数外部使用该变量。
提前致谢:)
答案 0 :(得分:1)
当您的Activity启动时,将调用onCreate方法一次。所以这就是你想要像你一样初始化TextView的地方:
TextView textView = (TextView)findViewById(R.id.textView);
但是,为了在用户单击按钮并设置TextView文本时设置变量myVariable的值,您必须在onClick方法中调用TextView的setText方法。
public void onClick(View view) {
userInput = (EditText)findViewById(R.id.userInput);
myVariable= userInput.getText().toString();
textView.setText(myVariable);
}
在用户单击时,变量myVariable已设置,并且该函数也可在函数外部使用,因为您已在顶部声明它。
希望有所帮助!
答案 1 :(得分:1)
如果你想在onClick方法之外使用它,请使用SharedPreferences,如
public class MainActivity extends AppCompatActivity {
Button hitButton;
EditText userInput;
String myVariable;
public static final String MyPREFERENCES = "MyPrefs" ;
public static final String KEY = "Key";
SharedPreferences sharedpreferences;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
hitButton = (Button)findViewById(R.id.button);
sharedpreferences = getActivity().getSharedPreferences(MyPREFERENCES, Context.MODE_PRIVATE);
hitButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
userInput = (EditText)findViewById(R.id.userInput);
myVariable= userInput.getText().toString();
SharedPreferences.Editor editor = sharedpreferences.edit();
editor.putString(KEY, myVariable);
editor.commit();
}
});
TextView textView = (TextView)findViewById(R.id.textView);
textView.setText(sharedpreferences.getString(KEY, null)); // THIS IS THE PROBLEM
// IT DISPLAYS NULL WHICH MEANS THAT String myVariable = null
}
}
希望它能帮到你
答案 2 :(得分:0)
onClick
是仅在您单击按钮时才会触发的方法。
因此,如果您的textView
需要在点击按钮时更新值,那么它应该在onClick
内,而不是像这样。
public void onClick(View view) {
userInput = (EditText)findViewById(R.id.userInput);
myVariable= userInput.getText().toString();
textView.setText(myVariable);
}
答案 3 :(得分:0)
完成Stallion的回答,
textView.setText(myVariable);
正如您所说,目前在创建活动时执行,因为它位于onCreate
方法中(这就是myVariable
仍为null
的原因),但再也不会后。
答案 4 :(得分:0)
IT显示NULL,表示字符串myVariable = null,因为您尝试使用null变量设置文本仅在onClick触发时更新。 你必须这样做才能使它工作: 在实例化按钮后,在onclick方法之外声明并实例化EditText userIput,并在声明中为myVariable提供默认值“”。