当前位置: 首页 > 知识库问答 >
问题:

onListItemClick()错误:它必须重写或实现超类型方法

方飞白
2023-03-14

我是Android和Java的初学者。我寻找这个错误的答案,但stackOverflow中的任何东西都不适合我的情况。我在读一本书,书中说我们需要使用一个onListItemClick()方法,该方法来自我们创建的扩展ListFragment的类(CrimeListFragment)(使用该方法和类是必需的)。

然而,我不断发现以下错误:

@Override
    public void onListItemClick(ListView 1, View v, int position, long id)
    {
        Crime c = (Crime)(getListAdapter()).getItemViewType(position);
        Log.d(TAG, c.getTitle() + " was clicked");
    }

错误说

“CrimeListFragment类型的onListItemClick上的方法必须重写或实现超类型方法。”

列表视图1参数也有问题。这也说明了一个错误。

这个项目很复杂,有很多类,但下面是这个页面的主要代码:

package com.bignerdranch.android.criminalintent;

import java.util.ArrayList;

import android.os.Bundle;
import android.support.v4.app.ListFragment;
import android.widget.ArrayAdapter;
import android.widget.ListView;


public class CrimeListFragment extends ListFragment {
    private static final String TAG = "CrimeListFragment";
    private ArrayList<Crime> mCrimes;



    @Override
    public void onListItemClick(ListView 1, View v, int position, long id)
    {
        Crime c = (Crime)(getListAdapter()).getItemViewType(position);
        Log.d(TAG, c.getTitle() + " was clicked");
    }

    @Override
    public void onCreate(Bundle savedInstanceState){
        super.onCreate(savedInstanceState);
        getActivity().setTitle(R.string.crimes_title);
        mCrimes = CrimeLab.get(getActivity()).getCrimes();

        ArrayAdapter<Crime> adapter = new ArrayAdapter<Crime>(getActivity(),
                android.R.layout.simple_list_item_1, mCrimes);

        setListAdapter(adapter);
    }

}

如何改掉这两个错误?谢谢。

共有2个答案

茹元魁
2023-03-14

谢谢大家的帮助。我能够纠正将1(数字)更改为l(灯)字母的错误,这消除了一个错误。然后出现了一个新的,上面写着:

不能从int转换为Crime

我想不出来。但后来(在第四次检查之后),我再次检查了我的代码(从书中)的抄写错误,结果发现我无意中选择了自动填充。getItemViewType()。getItem()方法。现在更具体地说是接受int位置,因为该参数用于数组,这就是我在代码中使用它的目的。

getItem()来自ArrayAdapterhttp://developer.android.com/reference/android/widget/ArrayAdapter.html

getItemViewType()来自适配器,这不是我想使用的。http://developer.android.com/reference/android/widget/Adapter.html

谢谢大家的帮助!它肯定修复了其中一个错误。我总是觉得奇怪,一个错误只有在你纠正另一个错误后才会出现。但至少它现在起作用了!

薄哲
2023-03-14

在Java中为变量或方法参数命名时,应遵循以下规则:

变量名区分大小写。变量的名称可以是任何合法标识符——Unicode字母和数字的无限长序列,以字母、美元符号“$”或下划线字符“”开头。然而,惯例是始终以字母开头变量名,而不是“$”或“”。此外,按照惯例,美元符号字符从未被使用过。在某些情况下,您可能会发现自动生成的名称将包含美元符号,但您的变量名称应始终避免使用美元符号。下划线字符也有类似的约定;虽然从技术上讲,变量名称以“x”开头是合法的,但不鼓励这种做法。不允许使用空白。

随后的字符可能是字母、数字、美元符号或下划线字符。约定(和常识)也适用于此规则。为变量选择名称时,使用完整的单词而不是神秘的缩写。这样做将使您的代码更易于阅读和理解。在许多情况下,这也将使您的代码具有自文档性;例如,名为catence、速和齿轮的字段比缩写版本(例如s、c和g)更直观。还要记住,您选择的名称不得是关键字或保留字。

如果您选择的名称仅包含一个单词,请用所有小写字母拼写该单词。如果它包含多个单词,请将每个后续单词的第一个字母大写。名称gearRathtml" target="_blank">io和电流齿轮是该约定的主要示例。如果您的变量存储一个常量值,例如静态最终intNUM_GEARS=6,则约定会略有变化,将每个字母大写并将后续单词与下划线字符分开。按照惯例,下划线字符从未在其他地方使用。

您使用“1”作为参数名称显然违反了它们。重命名它以符合命名规则,它应该可以解决这两个编译问题。

有关更多信息,请参阅此处

 类似资料:
  • 我正在使用JUnit 5,并从“软件测试”书中复制了代码,以便创建一个模拟对象进行测试。部分测试器代码是: 我有一个编译器错误,它说“方法isLeap(int)必须覆盖或实现一个超类型方法”。此错误在我覆盖isLeap()方法的行中报告。(@over下面的行) 好吧,令人惊讶的是,这就是我所做的。所以我不知道这是什么抱怨。下面是simpleDate类中的isLeap()方法: 正如您所看到的,测试

  • 我正在制作一个定制的盔甲,在我的盔甲课程中我得到了这个错误: ArmorE类型的方法getArmorTexture(ItemStack,Entity,int,int)必须重写或实现超类型方法 为什么我会犯这个错误? 这是我的代码: 装甲等级: 主类的一部分:

  • 问题内容: 这是我的代码,假设可以在按下按钮时更改一些文本:- 用下划线标记,它给我一个错误“类必须声明为抽象或实现抽象方法”。该代码大部分是从互联网上复制的,并且可以正常工作。可能仅是Android Studio错误。我如何使它工作? 问题答案: 必须实现该函数,否则您的类应该是抽象的,以便可以在某些子类中实现您的函数。但是在您的情况下,您犯了一个拼写错误。应该代替;

  • 问题内容: 有人在说我必须实施OnFragmentInteractionListener,这是一个错误,但是据我所知我正确地实现了它。任何帮助将不胜感激。 主要活动 导航片段 内容片段 错误 问题答案: 两者中的接口都包含一个具有相同签名的方法,并且正在实现一种方法来尝试覆盖这两个接口。 更改一个或两个方法的签名,然后在中实现两个方法。例如: 导航片段 内容片段 主要活动

  • 我有以下代码:https://pastebin.com/19njjj9s(我放在这里是因为对于stackoverflow来说代码太多了) 但是它不会覆盖onClick方法(第192行),我不明白为什么。 重写onclick方法背后的想法是获取日期并接收radiogroup以设置其中一个值。如果有人能帮我,我会帮你的。