设置OnLongClickListeners以在listview行中查看拦截listrow

时间:2016-03-21 12:51:57

标签: java android listview focus

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

所以这是我的问题:

只要将OnLongClickListener添加到textview,它就是listView行的一部分,当单击textview(不是长按)时,不再调用该listView的onItemClick方法。

XML:

列出行项目:     

<TextView
    android:id="@+id/leadingText"
    android:layout_width="0dp"
    android:layout_height="match_parent"
    android:layout_weight="0.2"
    android:gravity="center"
    android:textSize="35sp"
    android:singleLine="true"
    android:text="20x"/>

<LinearLayout

    android:layout_width="0dp"
    android:layout_height="match_parent"
    android:layout_weight="0.8"
    android:descendantFocusability="blocksDescendants"
    android:orientation="vertical">

    <ExpandableTextView
        android:id="@+id/firstLine"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:textSize="25sp"
        android:singleLine="true"
        android:ellipsize="end"
        android:gravity="center_vertical"
        android:clickable="false"
        android:focusable="false"
        />


    <TextView
        android:id="@+id/secondLine"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:gravity="center_vertical"
        android:singleLine="true"
        />

</LinearLayout>

的ListView:

<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>

代码:

将onItemClickListener添加到我的listView(这发生在一个片段中,它包含我的listview):

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);
            }

        }


    });

在我的自定义TextView onLongClickListener

中设置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;
        }
    });
}

是否有办法为每个文本视图实现单个onLongClickListener,但保留整行的onClickListener,因此textview不会拦截它并且行仍然可以选择?在listView上设置onItemLongClickListener对我没有帮助,因为我不希望整行可以长按,而是个人ExpandableTextView

0 个答案:

没有答案