Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/333.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 不是抽象的,并且不重写OnClickListener中的抽象方法onClick(视图)_Java_Android - Fatal编程技术网

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"
从您的XML
ImageButton


并在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) {