我无法通过按下按钮来更改文本视图文本

I can't change the textview text by pressing a button

大家好,我正在努力在 android 工作室中动态更改 textview 文本,但出现 0 个错误,但是当我测试程序运行时,但在我按下按钮时程序崩溃了

代码:

public class MyFragment extends Fragment { TextView tv;

Button[] btn = new Button[30];
TextView tv;



@Override
public  View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    // TODO Auto-generated method stub
View myFragmentView = inflater.inflate(R.layout.fragmentlayout, container, false);
tv = (TextView) findViewById(R.id.textView1);
for (int i = 0; i < 30; i++) {
    btn[i] = new Button(getActivity());
    btn[i].setText("1");
    btn[i].setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, `LayoutParams.WRAP_CONTENT));`
    btn[i].setVisibility(View.VISIBLE);
    btn[i].setId(i);
    linearLayout.addView(btn[i]);



btn[2].setOnClickListener(btnOnClickListener);


Button.OnClickListener btnOnClickListener = new Button.OnClickListener() {



 @Override
    public void onClick(View v) {
        // TODO Auto-generated method stub


        if (v == btn[2]) {

            tv.setText(btn[2].getText());
        }

    }
};

这不是代码的所有部分(有 2 个片段,这是其中之一)但我无法共享程序本身的所有部分,但这些都是关于我的问题的所有部分。如果你有什么要说的,请说出来。提前致谢

使用不完整的代码有点难以理解错误可能出在哪里。

你绑定到 btn[2] 一个 onClickListener ,

btn[2].setOnClickListener(btnOnClickListener);

但是你在绑定之后定义它。

Button.OnClickListener btnOnClickListener = new
    Button.OnClickListener() {
 ...
} 

也许您有一个全局侦听器使您 运行 代码(在您发布的源代码中不可见)?这意味着您绑定到一个有效但为空的侦听器,而真正的侦听器仅在之后创建。 像

Button.OnClickListener btnOnClickListener = new Button.OnClickListener() {
  @Override
  public void onClick(View v) {
    // does nothing 
  };
 };

@Override
protected void onCreateView(Bundle savedInstanceState) {
   super.onCreate(savedInstanceState);

  /* 
   * for loop creating buttons
  */

  btn[2].setOnClickListener(btnOnClickListener);

  Button.OnClickListener btnOnClickListener = new Button.OnClickListener() {
    @Override
    public void onClick(View v) {
      if (v == btn[2]) tv.setText(btn[2].getText());
    }
  };

只是猜测

如果 textView1 在您的主 Activity 中而不在您的片段中,那么 (TextView) findViewById(R.id.textView1); 将 return 为空。如果您想从片段中设置主 Activity 中的文本视图,则通过在主 Activity.

上调用 public 方法来实现

将这样的方法添加到您的主程序中 Activity:

public void setTextViewText(String text)
{
     TextView textview = (TextView) findViewById(R.id.textView1);
     if(textview != null)
         textview.setText(text);
}

然后更改片段中的 Button.OnClickListener 以调用方法:

Button.OnClickListener btnOnClickListener = new Button.OnClickListener() {
    @Override
    public void onClick(View v) {
        if (v == btn[2])
            ((MainActivity)getActivity()).setTextViewText(btn[2].getText());
    }
};

MainActivity 更改为您的主要名称 Activity class。