【问题标题】:Set long click listener for listview为listview设置长按监听
【发布时间】:2015-09-22 12:16:08
【问题描述】:

我有以下代码:

public class MainActivity extends ListActivity { 
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
}   
protected void onListItemClick(ListView l, View v, final int position, long id) {
    super.onListItemClick(l, v, position, id);
}}

我需要将其更改为 onListItemLongClick() 但如何?有可能吗?

【问题讨论】:

  • 你能不能试着用不同的方式解释你想做什么,更详细的?您的示例代码似乎没有完成任何事情,所以很难猜测...
  • 我需要一个函数,当我在 listview 中的某个项目上单击很长时间(如 2 秒)时,我在函数中的其他代码会执行。
  • 是的,我看到了这个,但我需要把它作为一个函数来做。看我的示例函数。我需要完全一样,但需要长按。

标签: android listview listener long-click


【解决方案1】:

您的问题与this one 非常相似,但看起来并不完全相同。

您注意到ListActivity 类没有专门针对这种情况的方法覆盖。

为了将此功能添加为方法覆盖,您的类应实现AdapterView.OnItemLongClickListener 接口,然后您可以添加onItemLongClick() 方法覆盖,它就像您已经拥有的onListItemClick() 方法覆盖一样,但响应长按。

只要确保你遵循this answer的指示,你必须在布局xml中使用android:longClickable="true",或者调用listview.setLongClickable(true);

例子:

public class MainActivity extends ListActivity implements AdapterView.OnItemLongClickListener {

    ListView listview;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        ListView listview = (ListView) findViewById(R.id.list);

        listview.setLongClickable(true);

    }

    @Override
    public boolean onItemLongClick(AdapterView<?> l, View v,
                                   final int position, long id) {

        Toast.makeText(this, "long clicked pos: " + position, Toast.LENGTH_LONG).show();

        return true;
    }

    protected void onListItemClick(ListView l, View v, final int position, long id) {
        super.onListItemClick(l, v, position, id);

        Toast.makeText(this, "short clicked pos: " + position, Toast.LENGTH_LONG).show();  

    }

 //....................

【讨论】:

    【解决方案2】:

    你可以简单地使用setOnItemLongClickListener

    listview.setOnItemLongClickListener(new OnItemLongClickListener() {
            @Override
            public boolean onItemLongClick(AdapterView<?> arg0, View arg1,
                    int arg2, long arg3) {
                Toast.makeText(ClassName.class, "Long Clicked Trigger: ", Toast.LENGTH_LONG).show();
                return true;
            }
    });
    

    【讨论】:

      【解决方案3】:

      试试这个

      listView.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
      
              public boolean onItemLongClick(AdapterView<?> arg0, View v,
                      int index, long arg3) {
      
                   // write your code
      
                  return false;
              }}); 
      

      【讨论】:

        【解决方案4】:

        您可以实现侦听器,然后回调将在您的类中显示为函数(方法):

        public class MainActivity extends ListActivity implements View.OnLongClickListener {
        
            @Override
            protected void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.activity_main);
                View listView = findViewById(R.id.list_view);
                listView.setOnLongClickListener(this);
            }
        
            @Override
            protected void onListItemClick(ListView l, View v, int position, long id) {
                super.onListItemClick(l, v, position, id);
            }
        
            @Override
            public boolean onLongClick(View v) {
                // Do your work here
                return false;
            }
        
        }
        

        【讨论】:

          【解决方案5】:

          是的,这是可能的,而且很容易实现, 只是你必须让列表视图的实例像

          ListView lv = (ListView)findViewById(R.id.listview);
          lv.setOnLongClickListener(new View.OnLongClickListener() {
                          @Override
                          public boolean onLongClick(View 
                              // your code here
                              return true;
                          }
          
                  });)
          

          在您的情况下,您可以在 xml 中创建一个列表视图,然后在 MainActivity 中找到该视图,然后按照上述步骤操作,而不是扩展 ListActivity。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2020-12-21
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多