gpt4 book ai didi

android - ListView 行中的 CheckedTextView 复选标记未显示

转载 作者:搜寻专家 更新时间:2023-11-01 09:05:36 25 4
gpt4 key购买 nike

我的 ListView 行布局的复选标记有问题。即使 ListView 有效(交互有效),单击 ListItem 时也不会显示复选标记。我该如何解决这个问题?

最佳答案

您需要自定义可检查的行布局。

首先您需要创建一个实现 Checkable 的自定义布局:

public class CheckableLinearLayout extends LinearLayout implements Checkable {
private Checkable mCheckable;

public CheckableLinearLayout(Context context) {
this(context, null);
}

public CheckableLinearLayout(Context context, AttributeSet attrs) {
super(context, attrs);
}

@Override
public boolean isChecked() {
return mCheckable == null ? false : mCheckable.isChecked();
}

@Override
protected void onFinishInflate() {
super.onFinishInflate();

// Find Checkable child
int childCount = getChildCount();
for (int i = 0; i < childCount; ++i) {
View v = getChildAt(i);
if (v instanceof Checkable) {
mCheckable = (Checkable) v;
break;
}
}
}

@Override
public void setChecked(boolean checked) {
if(mCheckable != null)
mCheckable.setChecked(checked);
}

@Override
public void toggle() {
if(mCheckable != null)
mCheckable.toggle();
}
}

此布局膨胀后,它会在其子级中查找可检查的布局(如 CheckedTextView 或 CheckBox),除此之外它非常简单。

下一步在布局中使用它:

<your.package.name.CheckableLinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="?android:attr/listPreferredItemHeight"
android:gravity="center_vertical" >

<TextView
android:id="@+id/text1"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />

<CheckedTextView
android:id="@+id/text2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:checkMark="?android:attr/textCheckMark"
android:gravity="center_vertical"
android:paddingLeft="6dp"
android:paddingRight="6dp" />

</your.package.name.CheckableLinearLayout>

请注意,您不能只使用 CheckableLinearLayout,因为它不是内置的 Android View ,您需要告诉编译器它在哪里。例如,将其保存为 checkable_list_row.xml。

最后像使用任何其他自定义布局一样使用这个新布局。

adapter = new MySimpleCursorAdapter(this, R.layout.checkable_list_row, cursor,
new String[] { Database.KEY_DATE , Database.KEY_NAME },
new int[] {R.id.text1, R.id.text2}, 0);

希望对您有所帮助!

关于android - ListView 行中的 CheckedTextView 复选标记未显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12125792/

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