片段中按钮的 onClickListener 问题
Issue with onClickListener for Button in Fragment
我在片段 class 中有一个按钮,我想在父 activity 中触发一个方法。我已经为此实现了一个接口。
我的问题是 View.onClickListener 给我以下错误:
Class 'Anonymous class derived from onClickListener' must either be declared abstract or implement abstract method 'onClick(View)' in 'onClickListener'
这很奇怪,因为我正在执行 onClick(View)。
这是我片段中的代码:
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View v = inflater.inflate(com.zlaporta.chessgame.R.layout.gamedescfragment, container, false);
final Button make_move = (Button) v.findViewById(R.id.make_move);
make_move.setOnClickListener(new ***View.OnClickListener()*** {
public void OnClick(View v) {
makeMoveCallback.makeMoveMethod();
}
});
星星表示 Android Studio 不喜欢的代码部分。
在onClick
方法上方添加@Override
在对象中使用匿名内部 class 执行此操作:
//declaring OnClickListener as an object
private OnClickListener btnClick = new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
}
};
//passing listener object to button
make_move.setOnClickListener(btnClick);
希望这会有所帮助:)
您能否尝试通过方法传递 OnClickListener
例如,
private View.OnClickListener getButtonOnClickListener() {
return new View.OnClickListener() {
@Override
public void onClick(View v) {
// this is the code
}
};
}
然后使用 make_move.setOnClickListener(getButtonOnClickListener());
这是对按钮使用点击事件的最佳方式。使用 onClick 侦听器实现。使用下面的代码。
public class MyFragment extends Fragment implements OnClickListener {
Button mButton;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.main_layout, null);
mButton = (Button) view.findViewById(R.id.button1);
mButton.setOnClickListener(this);
return view;
}
@Override
public void onClick(View v) {
if (v == mButton) {
// Do something on click button
}
}
}
如果单独使用每个点击事件,则需要更多 space。最好使用此代码。
或者您可以在 Fragment.
的 OnActivityCreated() 方法中使用以下按钮点击监听器的方法
make_move.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View view) {
makeMoveCallback.makeMoveMethod();
}
});
只是一个错字:替换方法名称
OnClick
和
onClick
我在片段 class 中有一个按钮,我想在父 activity 中触发一个方法。我已经为此实现了一个接口。
我的问题是 View.onClickListener 给我以下错误:
Class 'Anonymous class derived from onClickListener' must either be declared abstract or implement abstract method 'onClick(View)' in 'onClickListener'
这很奇怪,因为我正在执行 onClick(View)。
这是我片段中的代码:
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View v = inflater.inflate(com.zlaporta.chessgame.R.layout.gamedescfragment, container, false);
final Button make_move = (Button) v.findViewById(R.id.make_move);
make_move.setOnClickListener(new ***View.OnClickListener()*** {
public void OnClick(View v) {
makeMoveCallback.makeMoveMethod();
}
});
星星表示 Android Studio 不喜欢的代码部分。
在onClick
方法上方添加@Override
在对象中使用匿名内部 class 执行此操作:
//declaring OnClickListener as an object
private OnClickListener btnClick = new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
}
};
//passing listener object to button
make_move.setOnClickListener(btnClick);
希望这会有所帮助:)
您能否尝试通过方法传递 OnClickListener
例如,
private View.OnClickListener getButtonOnClickListener() {
return new View.OnClickListener() {
@Override
public void onClick(View v) {
// this is the code
}
};
}
然后使用 make_move.setOnClickListener(getButtonOnClickListener());
这是对按钮使用点击事件的最佳方式。使用 onClick 侦听器实现。使用下面的代码。
public class MyFragment extends Fragment implements OnClickListener {
Button mButton;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.main_layout, null);
mButton = (Button) view.findViewById(R.id.button1);
mButton.setOnClickListener(this);
return view;
}
@Override
public void onClick(View v) {
if (v == mButton) {
// Do something on click button
}
}
}
如果单独使用每个点击事件,则需要更多 space。最好使用此代码。
或者您可以在 Fragment.
的 OnActivityCreated() 方法中使用以下按钮点击监听器的方法make_move.setOnClickListener(new OnClickListener() { @Override public void onClick(View view) { makeMoveCallback.makeMoveMethod(); } });
只是一个错字:替换方法名称
OnClick
和
onClick