在片段中的onClick()与onCreateView中实例化ui元素

时间:2018-08-08 12:23:13

标签: java android onclick fragment

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,但我不确定。

谢谢您的帮助:)

1 个答案:

答案 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;
        }
    }