Java 不是抽象的,并且不重写OnClickListener中的抽象方法onClick(视图)
我正在尝试为我正在做的配方应用程序创建一个最喜欢的按钮 我正在使用图像按钮,并且遇到了错误消息Java 不是抽象的,并且不重写OnClickListener中的抽象方法onClick(视图),java,android,Java,Android,我正在尝试为我正在做的配方应用程序创建一个最喜欢的按钮 我正在使用图像按钮,并且遇到了错误消息 Error:(19, 65) error: anonymous jbscookbook.example.com.fyp.FavouriteBtn$1 is not abstract and does not override abstract method onClick(View) in OnClickListener 这是我的密码 recipe.xml <?xml version="1.0
Error:(19, 65) error: anonymous jbscookbook.example.com.fyp.FavouriteBtn$1 is not abstract and does not override abstract method onClick(View) in OnClickListener
这是我的密码
recipe.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/RelativeLayout1"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="@drawable/jbsbackground2"
android:orientation="vertical" >
<ImageView
android:id="@+id/iv_detail"
android:layout_width="fill_parent"
android:layout_height="150dp"
android:scaleType="centerCrop"
android:src="@drawable/barbecuedporkribs" />
<Button
android:id="@+id/button1"
android:layout_width="fill_parent"
android:layout_height="10dp"
android:layout_below="@+id/iv_detail"
android:background="#3D3C3A" />
<ScrollView
android:id="@+id/scrollView1"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/button1" >
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >
<TextView
android:id="@+id/textView2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_below="@+id/iv_detail"
android:layout_marginTop="5dp"
android:text="Recipe"
android:layout_toLeftOf="@id/favourites"
android:textColor="#000000"
android:textAppearance="?android:attr/textAppearanceLarge"
android:textStyle="bold" />
<TextView
android:id="@+id/tvName"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_below="@+id/textView2"
android:layout_marginTop="2dp"
android:text="TextView"
android:textColor="#000000"
android:textAppearance="?android:attr/textAppearanceMedium"
android:textStyle="italic" />
<TextView
android:id="@+id/tvFavourite"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Add To Favourites (click star)"
android:textColor="#000000"
android:textAppearance="?android:attr/textAppearanceMedium"
android:textStyle="bold"
android:layout_above="@+id/tvName"
android:layout_alignParentRight="true"
android:layout_alignParentEnd="true" />
<ImageButton
android:id="@+id/favbtn"
android:layout_width="60dp"
android:layout_height="60dp"
android:src="@drawable/staroff"
android:background="#00ffffff"
android:onClick="onClickFavBtn"
android:clickable="true"/>
<TextView
android:id="@+id/tvTD"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Ingredients"
android:textColor="#000000"
android:textAppearance="?android:attr/textAppearanceLarge"
android:textStyle="bold"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true" />
<TextView
android:id="@+id/tvIngredients"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_below="@+id/tvTD"
android:layout_marginTop="2dp"
android:text="TextView"
android:textColor="#000000"
android:textAppearance="?android:attr/textAppearanceMedium"
android:textStyle="italic" />
<TextView
android:id="@+id/tvK"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_below="@+id/tvIngredients"
android:layout_marginTop="5dp"
android:text="Preparation"
android:textColor="#000000"
android:textAppearance="?android:attr/textAppearanceLarge"
android:textStyle="bold" />
<TextView
android:id="@+id/tvPreparation"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_below="@+id/tvK"
android:layout_marginTop="2dp"
android:text="TextView"
android:textColor="#000000"
android:textAppearance="?android:attr/textAppearanceMedium"
android:textStyle="italic" />
</LinearLayout>
</ScrollView>
</RelativeLayout>
我在网上找到了很多不同的东西,但都没用
有人能帮我解决这个问题并告诉我哪里出了问题吗?编辑:
import android.app.Activity;
import android.content.Context;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.view.View;
import android.widget.ImageButton;
public class FavouriteBtn extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.recipe);
final ImageButton imgButton = (ImageButton) findViewById(R.id.favbtn);
imgButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
boolean isFavourite = readState();
if (isFavourite) {
imgButton.setImageResource(R.drawable.staroff);
saveState(false);
} else {
imgButton.setImageResource(R.drawable.staron);
saveState(true);
}
}
});
}
private void saveState(boolean isFavourite) {
SharedPreferences aSharedPreferences = this.getSharedPreferences(
"Favourite", Context.MODE_PRIVATE);
SharedPreferences.Editor aSharedPreferencesEdit = aSharedPreferences
.edit();
aSharedPreferencesEdit.putBoolean("State", isFavourite);
aSharedPreferencesEdit.commit();
}
private boolean readState() {
SharedPreferences aSharedPreferences = this.getSharedPreferences(
"Favourite", Context.MODE_PRIVATE);
return aSharedPreferences.getBoolean("State", true);
}
}
只需删除:
android:onClick="onClickFavBtn"
从您的XMLImageButton
并在listener中将
onClickFavBtn
更改为onClick
。您已经在xml中添加了单击功能。在这种情况下,您不必将单击侦听器附加到按钮。仅当您没有在xml中添加单击功能时,才需要侦听器实现。使用这两种方法中的任何一种,而不是同时使用这两种方法
解决方案1
改变
imgButton.setOnClickListener(new View.OnClickListener() {
public void onClickFavBtn(View v) {
boolean isFavourite = readState();
if (isFavourite) {
imgButton.setBackgroundResource(R.drawable.staroff);
isFavourite = false;
saveState(isFavourite);
} else {
imgButton.setBackgroundResource(R.drawable.staron);
isFavourite = true;
saveState(isFavourite);
}
}
});
public void onClickFavBtn(View v) {
至(只需卸下侦听器连接部件)
解决方案2
从xml和xml中删除android:onClick=“onClickFavBtn”
改变
imgButton.setOnClickListener(new View.OnClickListener() {
public void onClickFavBtn(View v) {
boolean isFavourite = readState();
if (isFavourite) {
imgButton.setBackgroundResource(R.drawable.staroff);
isFavourite = false;
saveState(isFavourite);
} else {
imgButton.setBackgroundResource(R.drawable.staron);
isFavourite = true;
saveState(isFavourite);
}
}
});
public void onClickFavBtn(View v) {
到
谢谢你的回答,当我按照你的建议去做时,按钮不再可点击,点击时也不会改变颜色。当我尝试你的第一个建议时,我注意到在if(isfavorite)下面,它说“isgovernment总是fales”和“isgovernment总是true”。我尝试了你刚才建议的方法,但没有成功。我收到了很多错误消息,如果我没有将imgButton设置为final,我会收到消息“变量imgButton是从内部类访问的,需要声明为final”@john立即检查我的编辑。我已经删除了您提到的警告,并且,将方法更改为
setImageResource()
。感谢您回复我,我复制了您的编辑并将其粘贴到我的代码中,它已经摆脱了“IsProfessional始终是假的”和“IsProfessional始终是真的”,但星星仍然不可单击且不改变颜色:-(
public void onClick(View v) {