ArrayAdapter in AsyncTask - Zugriff außerhalb von AsyncTask

  • 2 Antworten
  • Letztes Antwortdatum
blackfire185

blackfire185

Stamm-User
40
Hallo,
in meiner App werden in einer AsyncTask Daten von einer Webseite geladen.
Diese werden in eine Liste geschrieben (Auch AsyncTask)
Über einen Adapter wird das in onPostexecute in eine ListView geschrieben. Das klappt auch.

Nun will ich aber auf Klick ereignisse auf die ListeView reagieren. Dies kann ich ja nicht in der AsyncTask machen.

Nur ich habe die Liste und den Array Adapter folgendermasen deklariert:

Code:
 public class Downloadasync extends AsyncTask<String, Integer, String>{
    	List<String> Liste = new ArrayList<String>();
    	ArrayAdapter<String>adaptereintrag = new ArrayAdapter<String>(Main.this, android.R.layout.simple_list_item_1, Liste);

Nur ich brauch die ja auch oberhalb in meiner Main.class, wenn ich auf onItemClick reagieren will. Nur wie mache ich das?

Ich habe die Liste in der Main.class definieren können:
Code:
public class Main extends Activity {
	List<String> Liste = new ArrayList<String>();
	//ArrayAdapter<String>adaptereintrag = new ArrayAdapter<String>(Main.this, android.R.layout.simple_list_item_1, Liste);
    @Override
    public void onCreate(Bundle savedInstanceState) {
        
//...

        ListView lv = (ListView)findViewById(R.id.listView1);
        	lv.setOnItemClickListener(new OnItemClickListener(){

				public void onItemClick(AdapterView<?> arg0, View arg1,
						int position, long id) {
					
				}
				
        	}); 
        		
        	
    }
Dabei lief die App noch ohne Probleme. Nur den Adapter bekomme ich einfach nicht, ohne dass die APP crasht. wenn ich ihn am Anfang deklariere und dann in der ASyncTask darauf verweise klappt es genauso wenig wie wenn ich es unter in beiden fälle mit =new Array Adapter mache. Zweiteres ist ja logisch nur bei ersterem bin ich mir nicht sicher, was daran falsch ist.

Mein Ziel ist es nämlich nach Klick auf ein ListItem den String von der Liste azurufen, doch dazu brauche ich wie cih festgestellt habe den Adapter.

Könnt ihr mir helfen??

Danke
 
Du musst einen eigenen CursorAdpater programmieren... Das ist einfach gesagt eine Klasse die CursorAdapter erweitert. Dort kannst du dann auch deine einzelnen Elemente genau "designen" und programmieren... Deine Hauptactivity (wo die ListView drinnen sein soll) muss dann ListView erweitern. Dann kannst du auch einen OnClickListener bzw. auch ein ContextMenu erstellen (gedrückt halten auf ein ListView Element). Klingt alles etwas kompliziert aber sieh dir mal dieses Tutorial an: Android ListView Tutorial mit ListAdapter (Einsteiger) - Hoffe ich konnte dir etwas helfen!
 
  • Danke
Reaktionen: blackfire185
Danke. Ich musste gar nicht so viel ändern. nur ein Final ergänzen und eine kleine andere Änderung vornehmen:

Hier die funktionsfähige Lösung, fals jemand mal hierauf stößt:

Code:
public class Mainextends Activity {
	List<String> Liste = new ArrayList<String>();
    @Override
    public void onCreate(Bundle savedInstanceState)
//.....
final ListView lv = (ListView)findViewById(R.id.listView1);
        	lv.setOnItemClickListener(new OnItemClickListener(){

				public void onItemClick(AdapterView<?> arg0, View arg1,
						int position, long id) {
					
					String zeile = lv.getAdapter().getItem(position).toString();			
					
					
					
				}
				
        	});  

{


Code:
public class Downloadasync extends AsyncTask<String, Integer, String>{
    	List<String> Liste = new ArrayList<String>();
    	ArrayAdapter<String>adaptereintrag = new ArrayAdapter<String>(Main.this, android.R.layout.simple_list_item_1, Liste);

Danke
 

Ähnliche Themen

D
Antworten
8
Aufrufe
803
jogimuc
J
Zurück
Oben Unten