Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/333.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将OnLongClickListeners设置为在listview行中查看会截获listrow的onclick事件_Java_Android_Listview_Focus - Fatal编程技术网

Java 将OnLongClickListeners设置为在listview行中查看会截获listrow的onclick事件

Java 将OnLongClickListeners设置为在listview行中查看会截获listrow的onclick事件,java,android,listview,focus,Java,Android,Listview,Focus,我的listview的每一行都包含许多文本视图。 每个文本视图的singleline设置为true,并在末尾被截断。 如果文本视图被截断,用户应该可以长按它打开弹出窗口或toast并打印整个文本 这就是我的问题: 一旦我将OnLongClickListener添加到textview,即listView的一行的一部分,当单击textview(非longclicked)时,不再调用该listView的onItemClick方法 XML: 列出行项目: 是否有一种方法可以为每个文本视图实现一个单独的

我的listview的每一行都包含许多文本视图。 每个文本视图的
singleline
设置为
true
,并在末尾被截断。 如果文本视图被截断,用户应该可以长按它打开弹出窗口或toast并打印整个文本

这就是我的问题:

一旦我将OnLongClickListener添加到textview,即listView的一行的一部分,当单击textview(非longclicked)时,不再调用该listView的
onItemClick
方法

XML:

列出行项目:

是否有一种方法可以为每个文本视图实现一个单独的
onLongClickListener
,但保留整行的
onClickListener
,这样文本视图就不会截取它,并且该行仍然是可选的?在listView上设置
onItemLongClickListener
对我没有帮助,因为我不希望整行都是可长点击的,而希望单个
ExpandableTextView

private void init() {
    this.post(new Runnable() {
        @Override
        public void run() {
            final ViewTreeObserver vto = getViewTreeObserver();
            vto.addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
                @Override
                public void onGlobalLayout() {
                    Layout l = getLayout();
                    if (l != null) {
                        int lines = l.getLineCount();
                        if (lines > 0)
                            if (l.getEllipsisCount(lines - 1) > 0)
                                addLongClickListener();
                    }
                    vto.removeOnGlobalLayoutListener(this);
                }
            });
        }
    });

}

private void addLongClickListener() {

    this.setOnLongClickListener(new OnLongClickListener() {
        @Override
        public boolean onLongClick(View v) {
            Toast t = Toast.makeText(SmlApp.getInstance().getApplicationContext(), getText(), Toast.LENGTH_SHORT);
            t.show();
            return false;
        }
    });
}
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/root"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">

    <ListView
    android:id="@+id/list"
    android:divider="@android:color/transparent"
    android:dividerHeight="5.0dp"
    android:layout_width="match_parent"
    android:focusable="true"
    android:layout_height="match_parent">

    </ListView>

</LinearLayout>
listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {

        @Override
        public void onItemClick(AdapterView<?> parent, final View view, int position, long id) {

            UIListEntry item = (UIListEntry) parent.getItemAtPosition(position);
            if(selectedKey != item.getId()) {
                selectedKey = item.getId();
                view.setSelected(true);
            } else {
                selectedKey = null;
                view.setSelected(false);
                view.setActivated(false);
            }

        }


    });
private void init() {
    this.post(new Runnable() {
        @Override
        public void run() {
            final ViewTreeObserver vto = getViewTreeObserver();
            vto.addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
                @Override
                public void onGlobalLayout() {
                    Layout l = getLayout();
                    if (l != null) {
                        int lines = l.getLineCount();
                        if (lines > 0)
                            if (l.getEllipsisCount(lines - 1) > 0)
                                addLongClickListener();
                    }
                    vto.removeOnGlobalLayoutListener(this);
                }
            });
        }
    });

}

private void addLongClickListener() {

    this.setOnLongClickListener(new OnLongClickListener() {
        @Override
        public boolean onLongClick(View v) {
            Toast t = Toast.makeText(SmlApp.getInstance().getApplicationContext(), getText(), Toast.LENGTH_SHORT);
            t.show();
            return false;
        }
    });
}