我在哪里放置OnItemClickListener?

时间:2017-07-16 18:24:20

标签: android adapter onclicklistener

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

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

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

我尝试将它放在mainactivity上,应用程序正常工作,但是从不调用click函数,因此出现了错误。

我环顾谷歌寻求一些帮助,但我无法绕过它。

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

这是我到目前为止所做的:

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的自动更正建议我改为&#34; AdapterView.OnItemClickListener&#34;,getItem有nooptions被识别。

我试图添加&#34;实现OnItemClickListener&#34;关于类声明,但它也没有工作(给出错误,名称为红色,android工作室没有提供解决方案)。

有一次,我能够删除所有错误,但代码仍然没有工作,我不记得我做了什么,我只是在摆弄。

2 个答案:

答案 0 :(得分:0)

您可以将OnClickListener放在onCreate()

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

答案 1 :(得分:0)

对于您发布的代码,有一些问题值得怀疑。

  1. 您创建了OnItemClickListener,但您没有导入AdapterView.OnItemClickListener。那么你确定你正在使用合适的班级吗?
  2. onItemClick内,您引用​​adapter,这是AdapterView<?>类型的本地参数,但AdapterView没有此类方法getItem(int)。它不能作为CustomAdapter的引用,因为它未声明final
  3. 您使用Log.d(c.getNome(),c.getTelefono());是错误的。各种日志方法采用&#34;标记&#34;作为第一个参数。可能是您没有看到日志消息,因为这是错误的。
  4. 所以,真的,这甚至不应该编译。请检查您的代码并发布您拥有的最新,最正确,最可编译的版本。包括自定义适配器和布局的代码也不会受到影响。

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