gpt4 book ai didi

android - 试图点击 android ListView 项目 : android:descendantFocusability ="blocksDescendants" not working

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:22:19 30 4
gpt4 key购买 nike

这已在 StackOverflow 上的许多帖子中得到解决。最推荐的解决方案是设置:

android:descendantFocusability="blocksDescendants"

在列表项布局的根布局上。我已经完成了以下操作。

  • 在根上设置 android:descendantFocusability="blocksDescendants"列表项布局。
  • 在 listView 上调用了 setDescendantFocusability(BLOCK),以及每个 listViewItem。
  • 在 ImageButtons 上设置 focus=disabled

但是,当单击其中一个子 ImageButtons 时,我无法触发 ListViewListView 项目上的任何监听器。

下面是我用来呈现列表项的"template"。

<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/reminderItem"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:descendantFocusability="blocksDescendants"
android:padding="0dp">

<RelativeLayout
android:id="@+id/topPartOfReminder"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="10dp">

<LinearLayout
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:orientation="vertical"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:id="@+id/textLayout">

<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal">
<TextView
android:fontFamily="sans-serif-light"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="22sp"
android:text="10:00"
android:textStyle="normal"
android:id="@+id/textTime"/>
<TextView
android:fontFamily="sans-serif-condensed"
android:textSize="9sp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="AM"
android:paddingLeft="2dp"
android:textStyle="normal"
android:id="@+id/textAmPm"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceMedium"
android:text=" - "
android:id="@+id/textDivider"/>
<TextView
android:fontFamily="sans-serif-light"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="16sp"
android:text="March 26"
android:id="@+id/textDate"/>
</LinearLayout>
<TextView
android:fontFamily="sans-serif-light"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="12sp"
android:text="Blah blah blah blah"
android:id="@+id/textDescription"/>
</LinearLayout>

<LinearLayout
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_toRightOf="@+id/textLayout"
android:gravity="right">

<ImageButton
style="@style/HorizontalButton"
android:id="@+id/shiftButton"
android:layout_width="30dp"
android:layout_height="30dp"
android:background="@drawable/ic_action_forward"
android:layout_marginLeft="10dp"/>

<ImageButton
style="@style/HorizontalButton"
android:id="@+id/repeatButton"
android:layout_width="30dp"
android:layout_height="30dp"
android:background="@drawable/ic_action_refresh"
android:layout_marginLeft="10dp"/>

<ImageButton
style="@style/HorizontalButton"
android:id="@+id/tickButton"
android:layout_width="30dp"
android:layout_height="30dp"
android:background="@drawable/ic_action_done"
android:layout_marginLeft="10dp"/>

</LinearLayout>
</RelativeLayout>


<LinearLayout
android:id="@+id/tickButtonsView"
android:layout_width="match_parent"
android:layout_height="50dp"
android:padding="0dp"
android:orientation="horizontal"
android:visibility="gone">

<Button style="@style/HorizontalButton" android:text="OK"/>
<View style="@style/VerticalDivider"/>
<Button style="@style/HorizontalButton" android:text="Cancel"/>

</LinearLayout>

<LinearLayout
android:id="@+id/repeatButtonsView"
android:layout_width="match_parent"
android:layout_height="50dp"
android:padding="0dp"
android:orientation="horizontal"
android:visibility="gone">

<Button style="@style/HorizontalButton" android:text="day"/>
<View style="@style/VerticalDivider"/>
<Button style="@style/HorizontalButton" android:text="weekday"/>
<View style="@style/VerticalDivider"/>
<Button style="@style/HorizontalButton" android:text="week"/>
<View style="@style/VerticalDivider"/>
<Button style="@style/HorizontalButton" android:text="month"/>

</LinearLayout>

<LinearLayout
android:id="@+id/shiftButtonsView"
android:layout_width="match_parent"
android:layout_height="50dp"
android:padding="0dp"
android:orientation="horizontal"
android:visibility="gone">

<Button style="@style/HorizontalButton" android:text="1 week"/>
<View style="@style/VerticalDivider"/>
<Button style="@style/HorizontalButton" android:text="1 day"/>
<View style="@style/VerticalDivider"/>
<Button style="@style/HorizontalButton" android:text="1 hour"/>
<View style="@style/VerticalDivider"/>
<Button style="@style/HorizontalButton" android:text="10 mins"/>

</LinearLayout>
</LinearLayout>

我还在代码中设置了这个 descendantFocusability,只是为了确定:

public class ReminderItemAdapter extends CursorAdapter {
. . .

@Override
public View newView(Context context, Cursor cursor, ViewGroup parent) {
View v = mLayoutInflater.inflate(R.layout.reminder_item, parent, false);
parent.setDescendantFocusability(ViewGroup.FOCUS_BLOCK_DESCENDANTS);
((ViewGroup) v).setDescendantFocusability(ViewGroup.FOCUS_BLOCK_DESCENDANTS);
return v;
}

在我的 ImageButton 的样式上,我设置了 focusable=false,只是为了更好的衡量:

<resources>
<style name="HorizontalButton">
<item name="android:layout_width">0dip</item>
<item name="android:layout_weight">1</item>
<item name="android:layout_height">match_parent</item>
<item name="android:fontFamily">sans-serif</item>
<item name="android:textSize">12sp</item>
<item name="android:background">?android:attr/selectableItemBackground</item>
<item name="android:focusable">false</item>
<item name="android:focusableInTouchMode">false</item>
</style>
. . .

单击列表项的任何部分(包括子 TextView 元素)时,我收到了 onClick。但是,当单击任何 ImageButtons 时,单击不会被拾取。 (顺便说一句,我已经在 ImageButtons 上注册了 OnClickListeners,他们正在被调用。)

已设置:

  • 在 ListView 上设置 OnItemClickListener
  • 在 ListView 上设置 OnItemSelectedListener
  • 在每个 ListView 项上设置 OnClickListener。

但是如果单击其中一个 ImageButtons,则不会调用这些。

如有任何帮助,我们将不胜感激。

最佳答案

尝试在每个按钮布局中使用它

 android:focusable="false"
android:focusableInTouchMode="false"

并删除您为此所做的其他事情。也来自 ListView 。也删除这个

android:descendantFocusability="blocksDescendants"

还有这个

parent.setDescendantFocusability(ViewGroup.FOCUS_BLOCK_DESCENDANTS);
((ViewGroup) v).setDescendantFocusability(ViewGroup.FOCUS_BLOCK_DESCENDANTS);

关于android - 试图点击 android ListView 项目 : android:descendantFocusability ="blocksDescendants" not working,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20697534/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com