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);
这样的东西吗?
我的按钮链接到一个 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);
这样的东西吗?