- Wenn Sie nur HoneyComb und höher unterstützen, wird es einfach. Erstellen Sie eine StateListDrawable, und legen Sie sie auf den Hintergrund des Listenansichtselements fest.
selector.xml
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_activated="true" android:drawable="@drawable/item_focus" />
<item android:drawable="@android:color/transparent" />
</selector>
Listview-Element Layout
<ImageView
android:id="@+id/image"
android:layout_width="100dp"
android:layout_height="100dp"
android:padding="5dp" />
und die letzte, stellen Sie Ihren Listenansicht Wahl-Modus zu SINGLE
list.setChoiceMode(ListView.CHOICE_MODE_SINGLE);
2. Wenn Sie verwalten pre HoneyComb zu unterstützen, müssen Sie Ihr eigenes Layout überprüfbar implementieren schreiben. Sie tun dies, um mit geprüften Zustand auszuarbeiten. Nehmen wir ein Beispiel mit LinearLayout (Sie können dasselbe mit anderen machen).
package com.example.listviewactivestate;
import android.content.Context;
import android.util.AttributeSet;
import android.view.View;
import android.widget.Checkable;
import android.widget.LinearLayout;
public class CustomLinearLayout extends LinearLayout implements Checkable {
private static final int[] CHECKED_STATE_SET = { android.R.attr.state_checked };
private boolean checked = false;
public CustomLinearLayout (Context context, AttributeSet attrs) {
super(context, attrs);
}
public CustomLinearLayout (Context context) {
super(context);
}
@Override
public boolean isChecked() {
return checked;
}
@Override
public void setChecked(boolean checked) {
this.checked = checked;
refreshDrawableState();
// Propagate to childs
final int count = getChildCount();
for (int i = 0; i < count; i++) {
final View child = getChildAt(i);
if (child instanceof Checkable) {
((Checkable) child).setChecked(checked);
}
}
}
@Override
protected int[] onCreateDrawableState(int extraSpace) {
final int[] drawableState = super.onCreateDrawableState(extraSpace + 1);
if (isChecked()) {
mergeDrawableStates(drawableState, CHECKED_STATE_SET);
}
return drawableState;
}
@Override
public void toggle() {
this.checked = !this.checked;
}
}
Verwenden Sie diese benutzerdefinierte Ansicht in xml
<?xml version="1.0" encoding="utf-8"?>
<com.example.listviewactivestate.CustomLinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:background="@drawable/selector"
>
<ImageView
android:id="@+id/image"
android:layout_width="100dp"
android:layout_height="100dp"
android:padding="5dp" />
</com.example.listviewactivestate.CustomLinearLayout >
ändern state_activated
zu state_checked
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_checked="true" android:drawable="@drawable/item_focus" />
<item android:drawable="@android:color/transparent" />
</selector>
Auch gesetzt Listenansicht Wahl-Modus zu SINGLE
. Wenn es nicht funktioniert, fügen Sie onItemClickEvent
wie folgt hinzu
list.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
// TODO Auto-generated method stub
list.setItemChecked(position, true);//make sure click item is set to checked.
}
});
Bitte fügen Sie einen Code oder ein Bild hinzu. Für mich ist es schwer zu verstehen. –
@Yul siehe http://pastebin.com/3eeZ38dN – Harshid