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

时间:2014-01-27 06:24:13

标签: java android-fragments android-adapter

我是Android和Java的初学者。我搜索了这个错误的答案,但stackOverflow中的任何内容都不适用于我的情况。我正在写一本书,说我们需要使用onListItemClick()方法,该方法来自我们创建的类(CrimeListFragment),它扩展了ListFragment(使用方法,类是必需的)。

但是,我一直收到错误:

@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上的方法必须覆盖   或者实现超类型方法。"

List View 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 个答案:

答案 0 :(得分:1)

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

  

变量名称区分大小写。变量的名称可以是任何合法的   identifier - 无限长度的Unicode字母和序列   数字,以字母开头,美元符号“$”或者   下划线字符“”。 然而,惯例始终是开始的   您的变量名称带有字母,而不是“$”或“”。另外,   按照惯例,美元符号字符从未使用过。你可以   找到一些自动生成的名称将包含的情况   美元符号,但您的变量名应始终避免使用它。一个   对于下划线字符存在类似的约定;虽然它是   在技​​术上合法,用“_”开始变量的名称,这个   不鼓励练习。不允许有空格。

     

后续字符可以是字母,数字,美元符号或   强调字符。公约(和常识)适用于此   规则也是如此。为变量选择名称时,请使用完整的单词   而不是神秘的缩写。这样做可以使您的代码更容易   阅读和理解。在许多情况下,它也会生成您的代码   自记录文件;例如,名为cadence,speed和gear的字段   比缩写版本更直观,例如s,c和   G。另请注意,您选择的名称不得是关键字或   保留字。

     

如果您选择的名称只包含一个单词,请拼写该单词   所有小写​​字母。如果它由多个单词组成,   大写每个后续单词的第一个字母。名字   gearRatio和currentGear是这个惯例的主要例子。如果   您的变量存储一个常量值,例如static final int   NUM_GEARS = 6,约定略有变化,每个都大写   用下划线字母分隔后续单词。   按照惯例,下划线字符从未在别处使用过。

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

有关其他信息,请参阅here

答案 1 :(得分:0)

感谢大家的帮助。我能够纠正将1(数字)更改为l(如灯中)字母的错误,并且消除了一个错误。然后出现了一个新的,说:

  

无法从int转换为犯罪

我无法理解。但后来(在第四次检查之后)我再次检查了我的代码是否存在转录错误(来自书中),结果发现自动填充我偶然选择了.getItemViewType()它应该是{ {1}}方法。所以现在它更具体地接受.getItem(),因为该参数用于数组,这就是我在我的代码中使用它。

int position来自ArrayAdapter http://developer.android.com/reference/android/widget/ArrayAdapter.html

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

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

相关问题