2015-02-03 2 views
1

У меня есть gridview, чей макет элемента реализует checkable, поэтому gridview может обрабатывать checkbox внутри макета элемента при выборе элемента. Все это прекрасно работает, за исключением того, что программно задан элемент gridview. Флажок не выглядит выбранным, но что-то должно происходить в фоновом режиме, когда вы выбираете элемент, после которого его не снимают, и при выборе снова он становится установленным.Флажок в Gridview не проверяется на setSelection()

Любые идеи?

Редактировать: Похоже, что пребывание в клике не было выбрано из-за какой-то другой логики в моем коде, так что это может быть красная селедка для реальной проблемы.

Checkable расположение

public class WeedFilterItem extends LinearLayout implements Checkable { 

private TextView label; 
private CheckBox checkBox; 
private boolean mChecked; 

public WeedFilterItem(Context context) { 
    super(context); 
    init(); 
} 

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

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

private void init() { 
    inflate(getContext(), R.layout.weed_filter_item, this); 
    this.label = (TextView) findViewById(R.id.filter_textview); 
    this.checkBox = (CheckBox) findViewById(R.id.checkbox); 
} 

public void setChecked(boolean checked) { 
    mChecked = checked; 
    this.checkBox.setChecked(checked); 
} 

public boolean isChecked() { 
    return mChecked; 
} 

public void toggle() { 
    setChecked(!mChecked); 
} 
} 

макет элемент XML

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:orientation="vertical" android:layout_width="match_parent" 
    android:layout_height="wrap_content"> 

    <CheckBox 
     android:id="@+id/checkbox" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:focusable="false" 
     android:focusableInTouchMode="false" 
     android:clickable="false" 
     android:layout_gravity="center" 
     android:scaleX="1.5" 
     android:scaleY="1.5"/> 

    <TextView 
     android:id="@+id/filter_textview" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:textStyle="bold" 
     android:layout_gravity="center" 
     android:paddingTop="10dp" 
     /> 

</LinearLayout> 

Настройка GridView

final GridView filters = (GridView) child.findViewById(R.id.filter_gridview); 
final WeedFilterGridViewAdapter adapter = new WeedFilterGridViewAdapter(this, values); 
filters.setAdapter(adapter); 
filters.setSelection(0); 

Все остальное обрабатывается маточного GridView, просто пытается вызвать gridView.setSelection(int) на него.

Я также попытался сохранить int для выбранного элемента в адаптере и установить флажок, выбранный вручную в getView вместе с вызовом notifyDataSetChanged(), но это также не работает.

ответ

1

ОБНОВЛЕНО

final GridView filters = (GridView) child.findViewById(R.id.filter_gridview); 
final WeedFilterGridViewAdapter adapter = new WeedFilterGridViewAdapter(this, values); 
filters.setAdapter(adapter); 
filters.setSelection(0); 
// add this line 
filters.setItemChecked(0, true); 

http://developer.android.com/reference/android/widget/AbsListView.html#setItemChecked(int, boolean)

общественного недействительными setItemChecked (целое положение, логическое значение)

Добавлено в уровне API 1 Установка проверяется состояние указанного положения. Действует только в том случае, если для режима выбора установлено значение CHOICE_MODE_SINGLE или CHOICE_MODE_MULTIPLE.

Параметры позиции элемента которого проверяется состояние должно быть проверено значение Новое проверяется состояние для элемента

+0

это не сработало, я боюсь, государство также не может быть изменен, чтобы быть проверены, как это было связано с какой-то другой логикой в ​​моем коде. – RyanJohnstone

+0

попробовал notifyDataSetChanged на адаптере, я добавил фрагменты кода макета. – RyanJohnstone

+0

@DemandedCross в исходном вопросе, который вы указываете: «Все это работает отлично, за исключением того, что программно задан элемент gridview». можете ли вы также опубликовать код, где вы это делаете? –