gpt4 book ai didi

android 保留 gridview 项目 setChecked 不工作

转载 作者:行者123 更新时间:2023-11-29 21:20:07 25 4
gpt4 key购买 nike

好的,所以我似乎无法正确调用用于 gridView 的自定义 RelativeLayout 的 setChecked 方法。到目前为止我的方法:我在旋转之间保留一个 bool 列表,这样当调用 gridview 的基本适配器的 getView 方法时,我可以根据 bool 值是否被选中来设置一些数据。这个想法是我为设备改变方向保留一个 bool 数组。但是,无论我尝试什么,我似乎都无法让我的 getView 方法真正正确地使用 setChecked。到目前为止,这是我的代码:

自定义 RelativeLayout:

    public class CustomRelativeLayoutForGridView extends RelativeLayout implements
Checkable {

private boolean checked = false;
private static final int[] CHECKED_STATE_SET = { android.R.attr.state_checked };

public CustomRelativeLayoutForGridView(Context context, AttributeSet attrs,
int defStyle) {
super(context, attrs, defStyle);
}

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

public CustomRelativeLayoutForGridView(Context context) {
super(context);
}

@Override
protected int[] onCreateDrawableState(int extraSpace) {
final int[] drawableState = super.onCreateDrawableState(extraSpace + 1);
if (isChecked())
mergeDrawableStates(drawableState, CHECKED_STATE_SET);
return drawableState;
}

@Override
public boolean isChecked() {
return checked;
}

@Override
public void setChecked(boolean _checked) {
checked = _checked;
setBackgroundColor(checked ? 0xFF00FF00 : 0x00000000);
refreshDrawableState();
}

@Override
public void toggle() {
setChecked(!checked);
}
}

持有人:

    class myViewHolder {
TextView text;
ImageView icon;
CustomRelativeLayoutForGridView rLayout;
myViewHolder(View v) {
text = (TextView) v.findViewById(R.id.grid_item_label);
icon = (ImageView) v.findViewById(R.id.grid_item_image);
rLayout = (CustomRelativeLayoutForGridView) v.findViewById(R.id.gridViewCellLayout);
}
}

获取 View :

    public View getView(final int position, View convertView, ViewGroup parent) {
View gridView = convertView;
myViewHolder holder = null;
if (gridView == null) {
gridView = new View(context);
// get layout from mobile.xml
LayoutInflater inflater = (LayoutInflater) context
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
gridView = inflater.inflate(R.layout.file_manager_display_item,
null);
holder = new myViewHolder(gridView);
gridView.setTag(holder);
} else {
holder = (myViewHolder) convertView.getTag();
}
holder.text.setText(direcsPics[position].getName());
if(imageSelected[position]) {
holder.rLayout.setChecked(true);
} else {
holder.rLayout.setChecked(false);
}
return gridView;
}

正如您在 getView 方法中看到的那样,我明确地调用了 setChecked 方法,但似乎什么也没有发生。我仔细检查了 bool 值是否被正确保存,但 setChecked 似乎根本没有做任何事情。有没有人希望知道发生了什么以及如何解决这个问题?我非常感谢我能得到的任何帮助 ^_^ 我已经在这个代码上工作了一个星期,但运气不好 =(

最佳答案

好的!终于想通了,我想 =) 对我来说是一个真正的脑筋急转弯。首先,我会看一下让我感到困惑的部分:

if(imageSelected[position]) {
holder.rLayout.setChecked(true);
} else {
holder.rLayout.setChecked(false);
}

注意我的 setChecked 调用。这是我感到困惑的地方,我的意思是来自自定义 RelativeLayout 的代码肯定会更改背景颜色,因为在删除 setBackgroundColor 行后,我的突出显示不再有效。好吧,我对 RelativeLayout 的 setChecked 方法进行了一些 Log 调用,并且在此处调用了 setChecked,但我注意到对 setChecked 的调用比我实际调用的要多得多,而且所有调用都是在我之后调用的。所以android正在记忆这些观点。好吧,然后我记忆起我的 gridview 是如何在 xml 中设置的:

<GridView
android:id="@+id/gridView1"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_above="@+id/fileManagerAcceptButton"
android:columnWidth="100dp"
android:drawSelectorOnTop="false"
android:focusable="true"
android:focusableInTouchMode="true"
android:gravity="center"
android:horizontalSpacing="5dp"
android:choiceMode="multipleChoice"
android:numColumns="auto_fit"
android:stretchMode="columnWidth"
android:verticalSpacing="5dp" >
</GridView>

注意到选择模式了吗?所以,如果其他东西优先于 setChecked 调用,可能就是这个。所以也许我需要告诉 gridview parent 检查了什么,而不是试图在 child 中指定它。在此之后我回到我的 Activity 并将其添加到我的 OnCreateView(这是一个对话框 fragment ):

for (int i = 0; i < gridView.getCount(); i++) {
if (transferBoolArray[i]) {
gridView.setItemChecked(i, true);
} else {
gridView.setItemChecked(i, false);
}
}

问题为我解决了=)我只希望我的回答对以后的人有所帮助^_^

关于android 保留 gridview 项目 setChecked 不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20833894/

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