Wählen Sie das ListView-Element onClick in android
Was ist passiert, ich habe ein listview auf die ich setzen Hintergrundfarbe ändern auf Auswahl.Sowie standardmäßig bin ich legen Sie das erste listview-Element ausgewählt
public class OneWayFlightResult extends BaseAdapter {
private Activity activity;
private ArrayList<HashMap<String, String>> data;
private static LayoutInflater inflater=null;
public OneWayFlightResult(Activity a, ArrayList<HashMap<String, String>> d) {
activity = a;
data=d;
inflater = (LayoutInflater)activity.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
}
@Override
public int getCount() {
//TODO Auto-generated method stub
return data.size();
}
@Override
public Object getItem(int position) {
//TODO Auto-generated method stub
return position;
}
@Override
public long getItemId(int position) {
//TODO Auto-generated method stub
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View vi=convertView;
if(convertView==null)
vi = inflater.inflate(R.layout.row, null);
TextView flightTime = (TextView)vi.findViewById(R.id.flightTime); //title
TextView flightCompanyName = (TextView)vi.findViewById(R.id.flightCompanyName); //title
TextView flightNumber = (TextView)vi.findViewById(R.id.flightNumber); //title
ImageView flightLogo = (ImageView)vi.findViewById(R.id.flightLogo);
HashMap<String, String> flight = new HashMap<String, String>();
flight = data.get(position);
flightTime.setText(flight.get(TestActivity.FlightTime));
flightCompanyName.setText(TestActivity.FlightCompanyName);
flightNumber.setText(TestActivity.FlightNumber);
if(position == 0){
vi.setBackgroundResource(R.drawable.selection_effect);
vi.setSelected(true);
}
return vi;
}
Dies ist die XML-Datei, die ich in diesem selection_effect.xml
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_focused="true">
<shape>
<solid android:color="#ffffff" />
</shape>
</item>
<item>
<shape>
<solid android:color="#00a7eb" />
</shape>
</item>
</selector>
Also standardmäßig die erste Liste anzeigen ausgewählt ist.Nun, wenn die Benutzer wählen Sie die anderen listview-Element das erste markiert bleibt und der andere bekam auch den gleichen Effekt.Wie also könnte sich ändern, die Auswirkungen auf klicken Sie auf das listview-Element dynamisch .Bedeutet standardmäßig erste Element wird ausgewählt, wenn der Benutzer auswählt, andere Artikel, andere ausgewählt, die Wirkung von dem Standardwert entfernt
- mein Vorschlag war völlig falsch.
- ich bearbeitet meine Antwort. Und Sie müssen, löschen Sie diese
if(position == 0){
- und anderen Codes, die Sie verwendet haben, für die Auswahl. 🙂 - sehen Sie, diese Frage ist sehr interessant und müssen u Vorschlag stackoverflow.com/questions/18571844/...
- haben u gesehen, meine Frage zu kommentieren, dass das warten für u Antwort
- Mögliche Duplikate von Wie lösche ich die ListView-Auswahl?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich habe die Lösung für Ihr problem. Folgendes machen.
1) öffnen Sie Ihr Haupt-layout-Datei, wo ListView, die Sie erstellt haben.
Hinzufügen
android:choiceMode="singleChoice"
. Dies wird wie folgt Aussehen.2) Öffnen Sie Ihre list_item.xml layout-Datei. In denen, Sie Ihr root-anzeigen, hinzufügen
android:background="?android:attr/activatedBackgroundIndicator"
. In meinem Beispiel-Projekt, dessen Aussehen wie das unten.3) Öffnen Sie Ihre Aktivität-Datei. Nach der Einstellung-adapter, um Ihre
ListView
fügen Sielist.setSelector(R.drawable.selection_effect);
. Dies wird wie folgt Aussehen.Hier
selection_effect
ist drawable-Datei, die Sie erstellt haben, indrawable
- Verzeichnis.Getestet habe ich meinen code. Das ist in Ordnung.
4) Zum wählen der ersten Ansicht standardmäßig, entfernen Sie den code in
BaseAdapter
und setzen Sie folgenden code nach Abschluss der 3. Schritt.Müssen Sie es nach dem obigen code wie folgt Aussehen.
Erklärung
Wird diese Option row-Element basierend auf
selector
Sie definiert haben, in drawable-Verzeichnis.Dieser wird wählen Sie das erste Element standardmäßig beim ersten mal ausführen. Nachdem Sie können wählen Sie die anderen Objekte durch anklicken.
ls.setSelector(R.drawable.selection_effect);
Sie müssen diesen code. IngetView
gibt es keine code-zur Auswahl. Das wird automatisch gehandhabt, indem Sie-Auswahl. 🙂Konnte man nur deklarieren Sie eine " int " für Element geklickt, welches standardmäßig das erste Element, beginnt geklickt, dann im onclick-entsprechend aktualisieren.
setzen in oncreate etc.
Dann können Sie onItemClicked Zuhörer und tun dies,
Dies wird sich ändern, die hintergrund Farbe der zuvor ausgewählten Position zurück (in meinem Fall) die Standard-android-dunkles Thema Farbe, setzen Sie das neu ausgewählte zu einem schönen hellblau hervorgehoben, und aktualisieren Sie die ausgewählte int-entsprechend dem neu ausgewählten Elements.
Können Sie versuchen, wie diese:
nach Einstellung-adapter für das ListView-Steuerelement legen Sie die position zu 0 für Standardeinstellung, d.h.
listView.setSelection(0);
und inonItemClick
bekommen Sie ausgewählte position (3. parameter) Element, also innerhalb onItemClick schreibenlistView.setSelection("that 3rd param");
Ich habe ähnliche problem mit ListView-alle Sie tun ist, wenn das Element geklickt wird, rufen Sie eine Methode auf adapter
adadpter.SetPosition(position) {mSelectedPsoiton = position; notifyDataSetChanged();}
, und in Ihrem getView-Funktion überprüfen, ob die position ist gleich selectedPosition, dann den hintergrund entsprechend diese nie versagt, Fokus funktioniert nicht als ur im touch-Modus immer