2012-04-10 10 views
0

Android-Gurus! Ich möchte, dass du mir hilfst. Ich habe ein Aktivitätslayout mit zwei ListViews. Die Logik ist, wenn jemand ein Element im Menü ListView auswählt, ist das zweite ListView mit einigen Elementen gefüllt, die auch anklickbar sind. Ich habe es mit verschachtelten setOnItemClickListener gemacht. Der oberste Listener ist an die ListView-Menüelemente gebunden. Der verschachtelte Listener ist nach dem Ausfüllen an die zweite ListView gebunden. Wenn ich nicht nisten mache das alles Ok. Das Menü ListView zeigt mir den aktuell ausgewählten Eintrag. Wenn ich nisten mache. Alles funktioniert gut bis auf eine Sache. Mein Menü ListView verliert die aktuelle Auswahlmarkierung. Was ist los mit dir? Ich brauche die aktuelle Auswahl im Menü ListView. Der Code ist wie folgt.ListView verliert die aktuelle Auswahl, wenn verschachteltes setOnItemClickListener verwendet wird

menu.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
    @Override 
    public void onItemClick(AdapterView<?> arg0, 
    android.view.View arg1, int arg2, long arg3) { 
    mainList = (ListView) findViewById(R.id.listView2); 
    aaMainList = new cArrayAdapter(this, R.layout.mainlistitem, ALfiles); 
    mainList.setAdapter(aaMainList); 
    mainList.setOnItemClickListener(new AdapterView.OnItemClickListener(){   
     @Override 
     public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) { 
     lounchFileInDefaultVewer("file:/"+ ALfiles.get(arg2).getAbsolutePath()); 
     Log.d("ssapp", items[arg2].getAbsolutePath()); 
     } 
    }); 
    } 
}); 

Antwort

0

Wenn Sie die andere Liste soll nur dann sichtbar sein, nachdem ein Element in der „Menü“ Liste ausgewählt wird, setzen sie einfach standardmäßig mit Sicht GONE, tun dies alles außerhalb des ersten OnItemClickListener:

final ListView mainList = (ListView) findViewById(R.id.listView2); 
    aaMainList = new cArrayAdapter(this, R.layout.mainlistitem, ALfiles); 
    mainList.setAdapter(aaMainList); 
    mainList.setOnItemClickListener(new AdapterView.OnItemClickListener(){   
     @Override 
     public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) { 
     lounchFileInDefaultVewer("file:/"+ ALfiles.get(arg2).getAbsolutePath()); 
     Log.d("ssapp", items[arg2].getAbsolutePath()); 
     } 
    }); 

und legen Sie es nur vsibible im ersten OnItemClickListener:

menu.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
    @Override 
    public void onItemClick(AdapterView<?> arg0, 
    android.view.View arg1, int arg2, long arg3) { 
    mainList.setVisibility(View.VISIBLE); 
    } 
}); 

auch können Sie die Adapter Inhalte in der obigen listene ändern r.

+0

Vielen Dank für Ihren Vorschlag. Aber das ist nicht mein Fall. Die zweite Liste "mainList" funktioniert gut. Aber wenn es gefüllt ist, verliert das erste Listen- "Menü" die Auswahlmarkierung auf dem aktuellen Gegenstand. Ich habe versucht, das "Menü" sichtbar zu machen, wie Sie es vorgeschlagen haben. Es hat nicht für mich funktioniert. Ich bin der festen Überzeugung, dass der einzige ListView von allen seine aktuelle Auswahl zeigen kann. – SergeyS

0

Könnte es sein, dass Ihre erste Liste nicht mehr Fokus hat, so dass das ausgewählte Element nicht mehr auf der ersten Liste ist. Haben Sie sich die Support-Bibliothek angeschaut und die beiden Listen als zwei Fragmente implementiert? Auf diese Weise sind die Aktionen auf den beiden Listen unabhängig voneinander, aber Sie können immer noch Werte in der zweiten Liste von Anfang an festlegen, Ihre erste Liste behält auch das ausgewählte Element bei.

http://developer.android.com/sdk/compatibility-library.html

+0

Ok. Ich werde diesen Ansatz versuchen. Ich entwickle gerade eine App für Android 4.0. Nur um des Interesses willen können Sie mir eine Entscheidung für Android <3.0 vorschlagen? – SergeyS

Verwandte Themen