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

时间:2015-01-22 14:02:38

标签: android button textview

大家好我正努力在android studio中动态更改textview文本我得到0错误但是当我测试程序运行但是当时我按下按钮程序崩溃

CODE:

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个片段,这是其中之一)但我无法共享所有程序本身,但这些都是关于我的问题的部分。如果你有话要说,请说出来。提前致谢

2 个答案:

答案 0 :(得分:1)

如果代码不完整,则很难理解错误的位置。

绑定到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());
    }
  };

猜猜

答案 1 :(得分:0)

如果textView1在您的主Activity中而不在您的片段中,那么(TextView) findViewById(R.id.textView1);将返回null。如果要从片段中设置主Activity中的文本视图,请通过调用主Activity上的公共方法来执行此操作。

将这样的方法添加到您的主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更改为您的主要活动类的名称。