Fragment 中无法调用 OnClickListener

OnClickListener cannot be called in Fragment

我的按钮链接到一个 OnClickListener,它实现了一些代码,如果单击按钮就会执行。当我在 Activity class 中执行此操作时,结果完美无缺。然而,在 Fragment 中,情况似乎并非如此。为什么不能在 Fragment 中调用 OnClickListener?

public class MarketFragment extends Fragment {

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {

    final View rootView = inflater.inflate(R.layout.market_activity, container, false);

    Button plus1Button = (Button) rootView.findViewById(R.id.plus4_btn);
    Button minus1Button = (Button) rootView.findViewById(R.id.minus1_btn);

    plus1Button.setOnClickListener(new Button.OnClickListener() {
        public void onClick(View v) {
            EditText editText = (EditText)     rootView.findViewById(R.id.Number1);
            String str = editText.getText().toString();
            int Zahl = Integer.parseInt(str);

            Zahl = Zahl + 1;
            Log.d("Zahl nach Plus Button", Integer.toString(Zahl));

            editText.setText(Integer.toString(Zahl));
        }
    });

    minus1Button.setOnClickListener(new Button.OnClickListener() {
        public void onClick(View v) {
            EditText editText = (EditText) rootView.findViewById(R.id.Number1);
            String str = editText.getText().toString();
            // int Zahl = Integer.parseInt(str);

            //Zahl = Zahl - 1;

            //editText.setText(Integer.toString(Zahl));
        }
    });

我认为您没有从 onCreateView() 返回 rootView。

public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
    { 
    .....
    ....

     return rootView;
    }

尝试在onActivityCreated方法中设置监听

@Override
public void onActivityCreated(Bundle savedInstanceState) {
    super.onActivityCreated(savedInstanceState);

    Button plus1Button = (Button)getActivity().findViewById(R.id.plus4_btn);
    plus1Button.setOnClickListener(this);
}

编辑:您应该实施 View.OnClickListener

public class MarketFragment extends Fragment implements View.OnClickListener{...

有两件事你必须做。

  • 从 rootView 中删除 final
  • 在 OnClickListener 之外声明 EditText

所以最终应该工作的修改代码是:

public class MarketFragment extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {

    View rootView = inflater.inflate(R.layout.market_activity,container, false);


    Button plus1Button = (Button) rootView.findViewById(R.id.plus4_btn);
    Button minus1Button = (Button) rootView.findViewById(R.id.minus1_btn);
    EditText editText = (EditText)     rootView.findViewById(R.id.Number1);

    plus1Button.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {

            String str = editText.getText().toString();
            int Zahl = Integer.parseInt(str);

            Zahl = Zahl + 1;
            Log.d("Zahl nach Plus Button", Integer.toString(Zahl));

            editText.setText(Integer.toString(Zahl));
        }
    });

    minus1Button.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {

            String str = editText.getText().toString();
            // int Zahl = Integer.parseInt(str);

            //Zahl = Zahl - 1;

            //editText.setText(Integer.toString(Zahl));
        }
    });
.
.
return rootView;
}

看起来你有一个简单的错字 - rootView.findViewById(R.id.plus4_btn); 不应该是 rootView.findViewById(R.id.plus1_btn); 这样的东西吗?