有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

在ListView(Android)上使用OnTouchListener时java崩溃

我在尝试用列表视图测试多点触摸时,在Android 3.2中遇到了一个崩溃。我可以用一个只包含一个ListView和不到20行Java代码的简单布局重现这个异常。任何人对此事的建议都将不胜感激

我想做什么:

我希望用户能够通过拖动来检查ListView上的许多项目,而不妨碍滚动ListView,因此我认为用户将使用一个手指滚动ListView,然后用两个手指单击并拖动以选择他们移动的项目。当然,我决定为我的ListView设置一个onTouchListener,以便处理多点触控事件

问题: 用一个手指滚动效果很好。但当我用两个手指触摸然后抬起时,我的应用程序(有时)立即崩溃。有时意味着大约70%的时间,这让我相信这与从2个手指变为0个手指有关。崩溃甚至不在我拥有的任何代码中,而是在ListView本身(pastebin of full stack trace so that I don't clutter the page)调用的MotionEvent中的本机方法中

代码: 下面是我为了引起问题而写的内容

主要活动。爪哇

public class MainActivity extends Activity {
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        ListView lv = ((ListView) findViewById(R.id.listView1));

        String[] list = new String[]{"a", "b", "c", "d", "e", "f", "g"};

        lv.setAdapter(new ArrayAdapter<String>(this, 安卓.R.layout.simple_list_item_1, list));
        lv.setOnTouchListener(new OnTouchListener() {
            public boolean onTouch(View v, MotionEvent event) {
                if (event.getPointerCount() != 2) {
                    return false;
                }
                return true;
            }
        });
    }
}

主要活动。xml

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

    <ListView
        安卓:id="@+id/listView1"
        安卓:layout_width="match_parent"
        安卓:layout_height="wrap_content"
        安卓:layout_alignParentLeft="true"
        安卓:layout_alignParentTop="true" >

    </ListView>

</RelativeLayout>

就这样。我在运行Android 3.2.1的Thrive上运行我的程序,我的项目目标是API级别13(3.2)。我没有其他平板电脑来测试它,也不能使用我的普通开发虚拟机,因为没有多点触控支持

如果调用getter并返回false或true,不管值是多少,它都不会崩溃。我认为这与以下事实有关:当我触摸时,ListView会得到一个click事件,然后当调用我的侦听器时,它会开始使用任何包含两个手指的事件。然后,当我同时抬起两个手指时,ListView中没有任何事件表明它已完成,因此它仍然希望能够找到所选项目的指针索引

所以我的问题是“我写的东西打破了ListView的某种契约吗?”我应该以其他方式进行测试吗

另外,如果有人能告诉我API级别13的源代码,我将非常感激。它无法通过Android SDK管理器访问(只有14-16个),如果我有它,我很可能能够理解问题的根源


共 (0) 个答案