2013-04-04 7 views
8

Podążyłem za oficjalną stroną Android tutorial on creating contextual action menus. Używając poniższego kodu, po długim naciśnięciu jednej z moich pozycji ListView, zostanie wybrane , ale nie wskazuje to, że zostało wybrane. Używam motywu Holo Light i oczekuję, że kolor tła każdego wybranego elementu w moim ListView zmieni się na odcień niebieskiego.Elementy listy ListView nie stają się wizualnie "podświetlone" po wybraniu podczas działania kontekstowego

Czy to normalne zachowanie?

Próbowałem przetestować listView.setChoiceMode(ListView.CHOICE_MODE_SINGLE); i nawet pojedynczy wiersz nie zostanie podświetlony.

Pojawia się, aby podświetlić ostatnio wybrany wiersz, ale nie podświetla pozostałych zaznaczonych wierszy.

Czy zrobiłem coś nie tak, czy muszę ręcznie zmienić tło? Jeśli tak to jak?

Próbowałem również listView.setSelector(android.R.drawable.list_selector_background);, który jest rzeczywistym selektorem, który zawiera elementy dla różnych stanów. Niestety, dotyczy to tylko ostatnio wybranego elementu ListView.

public class MyActivity extends ListActivity { 

    protected void onCreate(Bundle savedInstanceState) { 

     super.onCreate(savedInstanceState); 

     // The list is generated here 

     ListView listView = getListView(); 
     listView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE_MODAL); 

     listView.setMultiChoiceModeListener(new MultiChoiceModeListener() { 
      // implements empty methods 
     } 
    } 
} 

Dzięki!

+0

zdążył u, aby dostać się do widzenia działania kontekstowego w ogóle? Próbowałem zrobić to samo bez powodzenia. Próbuje osiągnąć ten sam efekt, co efekt ListView z efektem Jelly Bean, który przechodzi do trybu usuwania po długim naciśnięciu. –

Odpowiedz

2

Moim zdaniem powinno być możliwe sposób opisywania, ale niestety tak nie jest.

Do tej pory odkryłem, że musisz użyć zasobu XML, który opisuje sposób, w jaki tło powinno wyglądać, gdy "stan" elementu jest "aktywowany".

Utwórz plik o nazwie "list_item_background_activated.xml" w katalogu "res/drawable /".

W nim zdefiniować element główny selektora Typ:

<?xml version="1.0" encoding="utf-8"?> 
<selector xmlns:android="http://schemas.android.com/apk/res/android" > 
<item 
    android:state_activated="true" 
    android:drawable="@android:color/darker_gray" /> 

</selector> 

Teraz należy zmodyfikować związanego zasobu (zasób, który określa w jaki sposób ListItem wygląda), aby odwoływać się do tego rozciągliwej:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:background="@drawable/list_item_background_activated" > 
    ... 
</RelativeLayout> 
1

Po prostu zaimplementowałem tryb akcji kontekstowej i miałem ten sam problem, który miałeś/miałeś. Ja też domyśliłem się, że domyślne zachowanie będzie takie, że każdy wybrany rząd zostanie podświetlony w jakiś sposób, ale nie.

Najprostszym sposobem uzyskania pożądanego efektu była zmiana zasobu pozycji listy używanego dla mojej ListActivity.

Używam ArrayAdapter więc wybór dla mnie jest wykonany w konstruktora adaptera:

new ArrayAdapter<Exercise>(context, android.R.layout.simple_list_item_1); 

Ostatnim parametrem jest identyfikator zasobu dla układu złożyć adapter użyje dla instanciating nowe widoki (Lista pozycji) w widoku listy.

Wybrałem ten, który uważałem za najbardziej podstawowy. Zmieniając go na:

new ArrayAdapter<Exercise>(context, android.R.layout.simple_list_item_activated_1); 

Otrzymałem pożądany efekt, wiersze wybrane w trybie akcji kontekstowej są teraz wyróżnione.

Istnieje również kilka innych identyfikatorów zasobów zdefiniowanych w Android.R.layout, które można wybrać, aby uzyskać podobny, ale inny wynik: http://developer.android.com/reference/android/R.layout.html, simple_list_item_activated_1 właśnie zrobił to dla mnie.

Nie wiem, czy

// The list is generated here 

ukrywa adaptera, a jeśli tak, adapter array ale jeśli tak, to powinno pomóc.

Inaczej zorientować można użyć predefiniowanych zasobów w innym miejscu lub wziąć nieco dłuższą drogę i określić selektorów jak sugeruje Brabbeldas

Powiązane problemy