【问题标题】:Where do I place OnItemClickListener?我在哪里放置 OnItemClickListener?
【发布时间】:2017-07-16 18:24:19
【问题描述】:

我已经构建了一个测试应用程序,它在列表视图上显示很少的记录。

现在我想点击一个项目并查看有关 android studio 的调试信息。

我知道我应该创建一个 OnItemClickListener,但我不确定应该将它放在哪里。

我试着把它放在mainactivity上,app可以工作,但是click函数从来没有被调用过,所以出了点问题。

我在 Google 上四处寻找帮助,但我无法全神贯注。

这应该是一个简单的操作(我有一个列表,我单击一个项目)但我无法使其工作。

这是我到目前为止所尝试的:

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ListView;

import java.util.LinkedList;
import java.util.List;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        ListView listView = (ListView) findViewById(R.id.listViewDemo);
        List list = new LinkedList();

        list.add(new Contatto("Antonio","Rossi","1234567890"));
        list.add(new Contatto("Pino","Bianchi","2345678901"));
        list.add(new Contatto("Peppe","Verdi","3456789012"));
        list.add(new Contatto("Leo","Rossi","4567890123"));
        list.add(new Contatto("Mario","Blu","5678901234"));
        list.add(new Contatto("Aldo","Da Vinci","6789012345"));

        CustomAdapter adapter = new CustomAdapter(this, R.layout.rowcustom,list);
        listView.setAdapter(adapter);
        OnItemClickListener clickListener = new OnItemClickListener() {

            @Override
            public void onItemClick(AdapterView<?> adapter, View view,
                                    int position, long id) {
                Contatto c = (Contatto)adapter.getItem(position);
                Log.d(c.getNome(),c.getTelefono());
            }
        };
        listView.setOnItemClickListener(clickListener);
    }
}

OnItemClickListener 无法识别,getItem 也无法识别。

android Studio 的自动更正建议我改为“AdapterView.OnItemClickListener”,getItem 没有可识别的选项。

我尝试在类声明中添加“implements OnItemClickListener”,但它也不起作用(报错,名称为红色,android studio 未提供解决方案)。

在某一时刻,我能够删除所有错误,但代码仍然无法正常工作,我不记得我做了什么,我只是在摆弄。

【问题讨论】:

  • 搜索“click listview android”在 SO 上显示多个答案,这些都没有帮助吗?如果没有,您应该发布您的代码,以便人们可以查看一些内容,这将有助于回答您的问题,而无需猜测多个潜在问题。
  • @dominicoder 我已经添加了代码和进一步的解释

标签: android adapter onclicklistener


【解决方案1】:

你可以把 OnClickListener 放在 onCreate() 中

如果您发布代码,那肯定会有所帮助

【讨论】:

    【解决方案2】:

    您发布的代码存在一些问题。

    1. 您创建了OnItemClickListener,但没有AdapterView.OnItemClickListener 的导入。那么您确定您使用的是正确的课程吗?
    2. 在您的onItemClick 中,您引用adapter,这是AdapterView&lt;?&gt; 类型的本地参数,但AdapterView 没有这样的方法getItem(int)。它不能是对您的 CustomAdapter 的引用,因为它没有声明为 final
    3. 您对Log.d(c.getNome(),c.getTelefono()); 的使用是错误的。各种日志方法将“标签”作为第一个参数。可能是您没有看到日志消息,因为那是错误的。

    所以,真的,这甚至不应该编译。请检查您的代码并发布您拥有的最新、最正确、最可编译的版本。包含自定义适配器和布局的代码也不会受到伤害。

    您是否尝试过使用调试器单步执行此代码并查看点击点处的断点是否被命中?

    【讨论】:

    • 在摆弄代码时,我在某个时候有一个可以编译但无法工作的版本。我试图复制它,但到目前为止我发布的代码是我迄今为止能够回忆的。我将发布所有其他类和 xml,以便更好地查看问题
    猜你喜欢
    • 2019-03-27
    • 2011-07-16
    • 2012-04-04
    • 2023-03-22
    • 2021-02-20
    • 2020-04-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多