ListView - 没有调用setOnItemLongClickListener

时间:2014-10-15 20:41:51

标签: android android-layout android-listview

我尝试了SO中提到的各种解决方案,但我的问题仍未得到解决。提到下面的代码。

Example.java

package com.android.Example;

import java.util.Collections;
import java.util.List;

import com.android.Example.db.Tbl_example_Title_DAO;
import com.Example.database.handler.example_Titles;
import com.android.Example.adapter.ArrayListAdapter;

import android.app.Activity;
import android.app.ListActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemLongClickListener;
import android.widget.ListView;

public class Example extends Activity {
    Tbl_example_Title_DAO tbl_example_title;
    example_Titles example_Titles;
    ListView lvlist;
    List<String> exampleTitlesList;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.listview_singleitems_list);

        lvlist = (ListView)findViewById(R.id.list);
        tbl_example_title = new Tbl_example_Title_DAO(this);

        lvlist.setClickable(true);

        lvlist.setLongClickable(true);

        lvlist.setOnItemLongClickListener(new OnItemLongClickListener() {

            @Override
            public boolean onItemLongClick(AdapterView<?> arg0, View arg1,
                    int arg2, long arg3) {
                // TODO Auto-generated method stub
                String s=exampleTitlesList.get(arg2);
                Log.w("HHHHHHHHHHHHHH", s);
                return true;
            }
        });



        showlist();
    }


    private void showlist() {
        example_Titles = new example_Titles();
        example_Titles.setexample("E");

        //List<example_Titles> exampleTitlesList = tbl_example_title.getTbl_example_Detailss(example_Titles);
         exampleTitlesList = tbl_example_title.getTbl_example_Details_str("E");
         Collections.sort(exampleTitlesList);   

        ArrayListAdapter arrayAdapter = new ArrayListAdapter(Example.this, exampleTitlesList); 
        lvlist.setAdapter(arrayAdapter);
        arrayAdapter.notifyDataSetChanged();

    }



}

listview_singleitems_list.xml文件

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    >

    <ListView
        android:id="@+id/list"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:divider="@color/transparent"
        android:dividerHeight="10dp"
        android:drawSelectorOnTop="true"
        android:footerDividersEnabled="false"
        android:padding="10dp"
        android:scrollbarStyle="outsideOverlay" />

</RelativeLayout>

listview的每一行 - amc.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal"
    android:id="@+id/lvi"    
    android:descendantFocusability="blocksDescendants"
    >
  <TextView
      android:id="@+id/tvCategory_listItem"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:layout_margin="5dp"/>
</LinearLayout>

数据已填充但未响应任何点击事件。

请帮助我理解代码中缺少的内容。感谢

更新1 - 尝试添加以下方法。但是没有用。

lvlist.setOnItemClickListener(new AdapterView.OnItemClickListener() {

      @Override
      public void onItemClick(AdapterView<?> parent, final View view,
          int position, long id) {
        final String item = (String) parent.getItemAtPosition(position);
        Log.w("HHHHHHHHHHHHHH", item);


      }

    });

更新2 - 我尝试使用以下代码,现在onclick工作得很好。所以,问题在于我只创建了amc.xml文件的方式。如果有人知道是什么问题,请告诉我

ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
                 android.R.layout.simple_list_item_1, android.R.id.text1, categoryTitlesList);

         lvlist.setAdapter(adapter);
         adapter.notifyDataSetChanged();

而不是

ArrayListAdapter arrayAdapter = new ArrayListAdapter(ExpenseCategoryList.this, categoryTitlesList);
lvlist.setAdapter(arrayAdapter);
arrayAdapter.notifyDataSetChanged();

1 个答案:

答案 0 :(得分:1)

摆脱这些代码..

lvlist.setClickable(true);

lvlist.setLongClickable(true);

listview响应项目点击和长按事件..所以我可以说它是一个视图组.. 但是当你指定一个列表视图来响应你已经完成的点击事件时,你会告诉列表视图这是一个视图本身来响应点击事件而不是它的孩子..

如果你看看你的代码

setOnItemLongClickListener or setOnItemClickListener respectively 

不是

setOnClickListener  or setOnLongClickListener 

所以测试一下,让我知道它是否有帮助