大家好我正努力在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个片段,这是其中之一)但我无法共享所有程序本身,但这些都是关于我的问题的部分。如果你有话要说,请说出来。提前致谢
答案 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
更改为您的主要活动类的名称。