我无法通过按下按钮来更改文本视图文本
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。
大家好,我正在努力在 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.
将这样的方法添加到您的主程序中 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。