Java 实例化onClick()中的ui元素与片段中的onCreateView
我意识到,当我在onClick()方法中实例化matchStatus时,我会得到一个NullPointerException,但当我在onCreateView()方法中执行该操作时,它工作得很好。有人能解释一下为什么吗 我的猜测是,它在onClick()方法中不起作用,因为它连接到保存片段的活动,并且它在活动中查找matchStatus,而在onCreateView()方法中不会发生这种情况,因为我正在膨胀片段_one.xml,但我不确定Java 实例化onClick()中的ui元素与片段中的onCreateView,java,android,onclick,fragment,Java,Android,Onclick,Fragment,我意识到,当我在onClick()方法中实例化matchStatus时,我会得到一个NullPointerException,但当我在onCreateView()方法中执行该操作时,它工作得很好。有人能解释一下为什么吗 我的猜测是,它在onClick()方法中不起作用,因为它连接到保存片段的活动,并且它在活动中查找matchStatus,而在onCreateView()方法中不会发生这种情况,因为我正在膨胀片段_one.xml,但我不确定 感谢您的帮助:)您已经在onCreateView中声明了
感谢您的帮助:)您已经在
onCreateView
中声明了主视图。所以你不能从onclick访问它。在onclick中,您可以使用查看
,这实际上是您的按钮
对视图使用全局变量。在onCreateView中启动它。你可以在任何地方使用
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;
}
}
嘿,谢谢你的帮助。这当然是可行的,但我也想知道为什么像上面那样实例化是行不通的。谢谢:)因为您的主视图变量位于局部变量onCreateView方法中。所以,当你想从另一个方法(onClick)访问它时,你得到了空值。这是有道理的,即使当我比较这两个视图时,它们似乎是相同的。你从中得到了答案吗?
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;
}
}