字符串变量在setOnClickListener()函数

时间:2016-05-11 13:27:23

标签: android string android-studio

我有一个简单的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。我需要在函数外部使用该变量。

提前致谢:)

5 个答案:

答案 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提供默认值“”。