如何覆盖onListitemClick

时间:2012-10-16 12:40:57

标签: android listview simplecursoradapter onclicklistener

我有一个拥有SimpleCursorAdapter的应用。我可以让DB表的内容显示在列表中,但是当我点击列表中的项目时我想做点什么。当我在eclipse中使用source并尝试覆盖clickListener时,没有什么可以覆盖。我正在寻找一种覆盖像onListitemClick的方法。我该怎么做?

Eclipse也抱怨onListItemClick方法,比如说它必须覆盖或实现超类型方法。如果我删除@Override注释然后该错误发生,则会显示列表,但触摸列表中的项目不会触发任何事件。

private class MyAdapter extends SimpleCursorAdapter {

        public MyAdapter(Context context, int layout, Cursor c, String[] from,
                int[] to) {
            super(context, layout, c, from, to);


        }

        @Override
        public
        View getView(int position, View convertView, ViewGroup parent) {
            Log.e(TAG, "inside myadapter getview");
            View v = super.getView(position, convertView, parent);
            if(v == null)
                return null;

            Cursor c = (Cursor)getItem(position);

            String phoneName = c.getString(c.getColumnIndex(LoginValidate.C_PHONE_NAME));
            String phoneNumber = c.getString(c.getColumnIndex(LoginValidate.C_PHONE_NUMBER));

            ((TextView)v.findViewById(R.id.phonename)).setText(phoneName );
            ((TextView)v.findViewById(R.id.phonenumber)).setText(phoneNumber);
            ((TextView)v.findViewById(R.id.phonename)).setTextColor(Color.BLACK);
            ((TextView)v.findViewById(R.id.phonenumber)).setTextColor(Color.BLACK);



            return v;
        }



    }// end of adapter

    @Override
    protected void onListItemClick(ListView l, View v, int position, long id) {

        Log.e(TAG, "clicked an item in list");
    }

2 个答案:

答案 0 :(得分:0)

默认情况下,适配器没有onListItemClick()方法,这就是注释困扰它的原因。

你必须将onListItemClick()绑定到listView ...尝试使用它

ListView list;
list.setOnListItemClick(listAdapter); //if your adapter implements OnListItemListener

或就像这样

list.setOnListItemClickListener(new OnListItemClickListener()
{
      @override
      public void onClick(args)
      {
           listAdapter.onListItemClick(args); //you will want this to be the first or the last call here
           //maybe some other stuff if you want here
      }
 }

那应该这样做。

总结一下:

1)在适配器中实现正确的接口,它将需要覆盖注释

2)将方法暴露在适配器中,并从附加到列表视图的私有onListItemClickListener中调用它。

答案 1 :(得分:0)

是的turtleboy,

您可以通过覆盖放置列表视图的Activity中的方法来完成此操作。

listView.setOnItemClickListener(new OnItemClickListener() {
    public void onItemClick(AdapterView<?> adapter, View arg1, int position, long arg3) {
        //do what you want to do            
}
});