Java 将OnLongClickListeners设置为在listview行中查看会截获listrow的onclick事件
我的listview的每一行都包含许多文本视图。 每个文本视图的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: 列出行项目: 是否有一种方法可以为每个文本视图实现一个单独的
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;
}
});
}