繁体   English   中英

为什么我的onitemlongclick监听器不起作用?

[英]Why isn't my onitemlongclick listener working?

从MainActivity:

public class MainActivity extends ListActivity implements AdapterView.OnItemLongClickListener {
    private DataSourceSql mDataSourceSql;
    protected ArrayList<String> mProfileNames;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mDataSourceSql = new DataSourceSql(MainActivity.this);
        mNames = new ArrayList<String>();

        //this part here
        ListView lv = (ListView) findViewById(android.R.id.list);
        lv.setLongClickable(true);
    }

在这种情况下, ListView的ID在XML中设置为android:id="@android:id/list"

然后在同一活动中:

@Override
protected void onListItemClick(ListView l, View v, int position, long id) {
    super.onListItemClick(l, v, position, id);
    Toast.makeText(this, mNames.get(position), Toast.LENGTH_SHORT).show();
}

@Override
public boolean onItemLongClick(AdapterView<?> l, View v, final int position, long id) {
    Toast.makeText(this, "long clicked: " + mNames.get(position), Toast.LENGTH_LONG).show();
    return true;
}

但是,当我长按列表中的一个项目时,唯一触发的事件是onListItemClick 长按我永远不会收到消息。

您不应该直接在onCreate()中实现类似AdapterView.OnItemLongClickListener的接口。仅使用旧方法(您的类实现了此接口),并且必须重写每个方法,如下所示:

lv.setOnItemLongClickListener(this);
lv.setonListItemLongClickListener(this);

我想我已经解决了,但是如果我缺少某些东西,请有人纠正我。

我删除了“ implements ...”,然后将以下内容添加到onCreate方法中:

lv.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener
                () {
            @Override
            public boolean onItemLongClick(AdapterView<?> av, View v, int
                    pos, long id) {
                onListItemLongClick(v, pos, id);
                return false;
            }
        });

尽管我不确定是否应该在此处返回true或false。

我还将下面的长按功能更改为

public boolean onListItemLongClick(View v, final int position, long id) {
    Toast.makeText(this, "long clicked: " + mNames.get(position), Toast.LENGTH_LONG).show();
    return true;
}

编辑:

更快的方法是只添加lv.setOnItemLongClickListener(this); 到我在OP中的onCreate方法。

用这个。 您的问题将解决。

 listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                Toast.makeText(MainActivity.this, "Click", Toast.LENGTH_SHORT).show();
            }
        });
        listView.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() {
            @Override
            public boolean onItemLongClick(AdapterView<?> parent, View view, int position, long id) {

                Toast.makeText(MainActivity.this, "Long Click", Toast.LENGTH_SHORT).show();
                return true;
            }
        });

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM