我在片段类中有一个按钮,我想在父活动中触发一个方法。我为此实现了一个接口。
我的问题是View.onClickListener给了我以下错误:
Class'从onClickListener派生的匿名类'必须被宣布为抽象的或实现抽象方法' 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不喜欢的部分代码。
答案 0 :(得分:3)
在对象中使用匿名内部类:
//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);
希望这会有所帮助:)
答案 1 :(得分:3)
只是一个错字:替换方法名称
OnClick
与
onClick
答案 2 :(得分:1)
您可以尝试从方法
传递OnClickListener如,
private View.OnClickListener getButtonOnClickListener() {
return new View.OnClickListener() {
@Override
public void onClick(View v) {
// this is the code
}
};
}
然后使用make_move.setOnClickListener(getButtonOnClickListener());
答案 3 :(得分:1)
这是使用按钮的点击事件的最佳方式。使用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
}
}
}
如果单独使用每个点击事件,则需要更多空间。它更好地使用此代码。
答案 4 :(得分:0)
在@Override
方法
onClick
答案 5 :(得分:0)
或者您可以在片段的 OnActivityCreated()方法中使用按钮点击Listener的以下方法。
make_move.setOnClickListener(new OnClickListener() { @Override public void onClick(View view) { makeMoveCallback.makeMoveMethod(); } });