public class FragmentOne extends Fragment implements View.OnClickListener{
public FragmentOne() {}
TextView matchStatus;
@Override
public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); }
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_one, container, false);
Button matchButton = (Button)view.findViewById(R.id.button_match);
matchButton.setOnClickListener(this);
return view;
}
@Override
public void onClick(View view){
switch(view.getId()){
case R.id.button_match:
matchStatus = (TextView)view.findViewById(R.id.textView_matchStatus);
matchStatus.setText("sup");
break;
}
}
我意识到,当我在onClick()方法中实例化 matchStatus 时,会收到NullPointerException,但是当我在onCreateView()方法中进行操作时,它就可以正常工作。有人可以解释一下为什么吗?
我的猜测是它在onClick()方法中不起作用,因为它连接到保存有Fragment的Activity,并且它在Activity中寻找matchStatus,而在onCreateView()方法中不会发生这种情况,因为我正在膨胀fragment_one.xml,但我不确定。
谢谢您的帮助:)
答案 0 :(得分:0)
您已在onCreateView
中声明了主视图。这样您就无法通过onclick访问它。在onclick中,您使用了view
,它实际上是您的Button。
使用全局变量进行查看。在onCreateView中启动它。在您想要的任何地方使用。
public class FragmentOne extends Fragment implements View.OnClickListener{
public FragmentOne() {}
View rootview;
TextView matchStatus;
@Override
public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); }
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
rootview = inflater.inflate(R.layout.fragment_one, container, false);
Button matchButton = (Button)rootview.findViewById(R.id.button_match);
matchButton.setOnClickListener(this);
return rootview;
}
@Override
public void onClick(View view){
switch(view.getId()){
case R.id.button_match:
matchStatus = (TextView)rootview.findViewById(R.id.textView_matchStatus);
matchStatus.setText("sup");
break;
}
}