gpt4 book ai didi

Android gridview保持选中项目

转载 作者:IT老高 更新时间:2023-10-28 23:16:36 26 4
gpt4 key购买 nike

我有一个包含多个项目的 GridView,但是一旦调用了 onClickListener,这些项目必须保持选中状态。我怎样才能做到这一点?

我已经尝试过 v.setSelected(true) 但它似乎不起作用。

gridview.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View v,
int position, long id) {
// Toast.makeText(Project.this, "Red" + position,
// Toast.LENGTH_SHORT).show(); //position = al catelea element
v.setPressed(true);
if (bp == 2) {
if (position == 0) {
Square.setSex(R.drawable.girl_body2v);
Square2.setHair(R.drawable.girl_hair_01v);
SquareAccesories.setAcc(R.drawable.girl_accessories_01v);
SquareEyes.setEyes(R.drawable.eyes_1v);
SquareLips.setLips(R.drawable.lip_1v);
Square3.setDress(R.drawable.girl_tops_01v);
SquareShoes.setShoes(R.drawable.girl_shoes_01v);
SquarePants.setPants(R.drawable.girl_bottom_01v);
setS(2);

这是 onClickListener 代码的一小部分,因为我有很多案例。

最佳答案

我认为更好的方法是告诉 GridView 您希望支持选择(检查)项目:

gridView.setChoiceMode(GridView.CHOICE_MODE_MULTIPLE);

然后确保GridView 中的项目实现Checkable界面。这意味着项目可以是 CheckboxToggleButton 等,或者您可以自己添加 Checkable 支持 - 例如使 RelativeLayout 可检查。 (请参见下面的示例。)

与其他答案相比,大部分工作由 GridView 本身负责 - 不需要 onClickListener。无需自己存储状态,只需调用 gridView.getCheckedItemIds() 或类似方法。


要使 RelativeLayout(或任何东西)可检查,请创建它的子类:

public class CheckableRelativeLayout extends RelativeLayout implements Checkable {
private boolean checked = false;
private static final int[] CHECKED_STATE_SET = { android.R.attr.state_checked };

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

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

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

@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;
refreshDrawableState();
}

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

}

请注意,方法 onCreateDrawableState 会更新视觉样式。您不必这样做,例如可以直接在 setChange 方法中更改背景。

然后使用 CheckableRelativeLayout 作为 GridView 中项目的顶 View :

<foo.bar.CheckableRelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:background="@drawable/my_awesome_background"
... more stuff
>
... content of the relative layout
</com.test.CheckableRelativeLayout>

并定义在res/drawable/my_awesome_background.xml中检查项目时背景如何变化:

<selector xmlns:android="http://schemas.android.com/apk/res/android" > 
<item android:state_checked="true" >
<!-- This applies when the item is checked. -->
<shape android:shape="rectangle" >
<solid android:color="#A8DFF4" />
</shape>
</item>

<item>
<!-- This applies when the item is not checked. -->
<shape android:shape="rectangle" >
<solid android:color="#EFEFEF" />
</shape>
</item>
</selector>

关于Android gridview保持选中项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11326089/

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