【问题标题】:Android code not being accepted - OnItemClickListener() - "...must implement the inherited.."不接受 Android 代码 - OnItemClickListener() - “...必须实现继承的..”
【发布时间】:2012-04-18 00:40:36
【问题描述】:

我的 OnItemClickListener 有问题。 需要注意的是,我是按照 android 开发者网站提供的指南编写的: http://developer.android.com/resources/tutorials/views/hello-listview.html

设置监听器时:

lv.setOnItemClickListener(new OnItemClickListener() {

新的“OnItemClickListener”出现以下错误

“新的AdapterView.OnItemClickListener(){}类型必须实现继承的抽象方法AdapterView.OnItemClickListener.onItemClick(AdapterView, View, int, long)”

我尝试了 eclipse 的建议并添加了明显未实现的方法,但它只是生成了一个除了参数中的实际细节之外几乎相同的方法,例如我有的地方

"int position"

自动生成的代码有

"int arg2"

并且通过使用此方法,它使我的方法变得多余,因为它不会被调用(我认为...)

我试图更改代码的各个部分,例如参数的内容等,但我没有运气。 所以我基本上是在寻找一些帮助来解决这个问题,任何建议/方向将不胜感激。 我的完整代码如下所示:

import android.app.Activity;
import android.app.ListActivity;
import android.os.Bundle;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;

public class View extends ListActivity{
static final String[] entriesArray = new String[]{
    "One", "Two", "Three", "GO"};


@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    setListAdapter(new ArrayAdapter<String>(this, R.layout.dbrowviewer, entriesArray));

    ListView lv = getListView();
    lv.setTextFilterEnabled(true);

    lv.setOnItemClickListener(new OnItemClickListener() {
        public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
            //When clicked show toast
            Toast.makeText(getApplicationContext(), ((TextView) view).getText(),
            Toast.LENGTH_SHORT).show();
        }

    });

}
}

还有布局以防万一.. (R.layout.dbrowviewer)

<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:padding="10dp"
android:textSize="16sp" >
</TextView>

另外,如果有人有空来提供建议。我在 toast 中出现“(TextView) view.getText()”错误,表明我无法从 View 转换为 TextView。快速浏览了一下没有运气,但我目前正在尝试解决第一个也是更重要的问题!

提前致谢,

乔什

【问题讨论】:

    标签: java android listview click onitemclicklistener


    【解决方案1】:

    首先,这是我修改过的代码,它工作正常。

    lv.setOnItemClickListener(new AdapterView.OnItemClickListener() {
    
        @Override
        public void onItemClick(AdapterView<?> parnet, android.view.View view,
                int position, long id) {
            Toast.makeText(getApplicationContext(), ((TextView) view).getText(),
                    Toast.LENGTH_SHORT).show();
        }
    
    });
    

    这里的问题是你的“类”名,你选择了“View”作为你的类名,恰好和android.view.View一样,所以如果你使用View作为第二个参数的类型你的听众,编译器会感到困惑。

    我的建议是,您最好为您的活动课程选择另一个名称。我一般使用activity的功能加上一个“Activity”后缀作为activity类名,例如如果要显示用户列表,可以选择UserListActivity,这里我选择“ListActivity”作为后缀表示该活动实际上是从 ListActivity 派生的。

    【讨论】:

    • 非常感谢您的帮助。我什至没有考虑过这一点,即使我已经尝试过使用“查看视图”进行一些处理。有时它只需要另一双眼睛……而且背后可能还有更多的知识和经验。再次欢呼。
    • @ChrisThompson,谢谢你,先生!并且真的不应该使用裸露的“ListActivity”作为活动名称。
    • @JoshSuckling,学习东西的最好方法就是犯错。 :-)
    【解决方案2】:

    你可以尝试添加:

    @Override

    onItemClick() 上方:

    lv.setOnItemClickListener(new OnItemClickListener() {
    
    @Override
    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
             //When clicked show toast
             Toast.makeText(getApplicationContext(), ((TextView) view).getText(),
             Toast.LENGTH_SHORT).show();
    }
    
    });
    

    【讨论】:

    • 刚刚尝试,为 onItemClick 抛出了一个新错误,声明:“类型为 new AdapterView.OnItemClickListener(){} 的方法 onItemClick(AdapterView>, View, int, long) 必须覆盖超类方法”干杯。
    【解决方案3】:

    View 已经是一个存在的类,尝试将其重命名为其他名称....

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-11-14
      相关资源
      最近更新 更多