我正在尝试在手机上运行AndroidApp。我能够显示我的欢迎片段,而且我可以触发日志消息。不幸的是,如果我想将文本值从'welcome'更改为'Neuer Text',我会得到一个空指针异常。什么地方出了错?我对android开发很新。
public class WelcomeFragment extends Fragment implements OnClickListener {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_welcome, container, false);
Button button1 = (Button) view.findViewById(R.id.button1);
button1.setOnClickListener((OnClickListener) this);
return view;
}
@Override
public void onClick(View v) {
//Log.d("JobaApp", "Logtext"); // see LogCat
TextView text1 = (TextView) v.findViewById(R.id.welcome_text);
text1.setText("NeuerText");
}
}
答案 0 :(得分:2)
在onClick()
中,v
是点击的视图项,例如按钮,而不是onCreateView()
中充气的视图。
您应该使用getView()
:
public class WelcomeFragment extends Fragment implements OnClickListener {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_welcome, container, false);
Button button1 = (Button) view.findViewById(R.id.button1);
button1.setOnClickListener((OnClickListener) this);
return view;
}
@Override
public void onClick(View v) {
//Log.d("JobaApp", "Logtext"); // see LogCat
switch (v.getId) {
case R.id.button1:
TextView text1 = (TextView) getView().findViewById(R.id.welcome_text);
text1.setText("NeuerText");
break;
}
}
}
此外,如果您不希望针对每个按钮执行此操作,您可能需要考虑使用switch
中的onClick()
声明。
答案 1 :(得分:1)
你无法从按钮的onClick传递参数(" View v")中获取TextView,因为这是实际按钮的视图。
您应该执行以下操作:
public class WelcomeFragment extends Fragment implements OnClickListener {
View view;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
view = inflater.inflate(R.layout.fragment_welcome, container, false);
Button button1 = (Button) view.findViewById(R.id.button1);
button1.setOnClickListener((OnClickListener) this);
return view;
}
@Override
public void onClick(View v) {
//Log.d("JobaApp", "Logtext"); // see LogCat
TextView text1 = (TextView) view.findViewById(R.id.welcome_text);
text1.setText("NewerText"); //Also fixed typo
}
}
答案 2 :(得分:0)
在OnClick(View v)
中,v是您点击的按钮。 TextView不属于Button,属于R.layout.fragment_welcome
。因此,您可以在片段的onCreateView()
内找到并初始化TextView,然后在onClick()中使用它;
有些像这样:
public class WelcomeFragment extends Fragment implements OnClickListener {
TextView tv;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_welcome, container, false);
Button button1 = (Button) view.findViewById(R.id.button1);
button1.setOnClickListener((OnClickListener) this);
tv = (TextView) v.findViewById(R.id.welcome_text);
return view;
}
@Override
public void onClick(View v) {
//Log.d("JobaApp", "Logtext"); // see LogCat
tv.setText("NeuerText");
}
}