So,
ich hab es, so glaube ich, gelöst! Ob es die sauberste Variante ist? Ich glaube nicht, aber es ist die einzige die Funktioniert!
In meine MainActivity in der onCreate() rufe ich meinen AsyncTask auf und übergebe dabei den context und meine ListView
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
listView = (ListView) findViewById(R.id.mylist);
AsyncRSS as = new AsyncRSS(MainActivity.this, this.listView);
as.execute("http://search.twitter.com/search.json?q=android");
}
In der MainActivity habe ich dann noch die update() Methode, die ich von der onPostExecute in der AsyncTaskClass aufrufe und übergebe dabei einen Adapter und die ListView, die vorher in die AsyncTaskClass geschleust habe:
public AsyncRSS(Activity activity, ListView lv){
super();
this.mActivity = activity;
this.mLv = lv;
}
@Override
protected void onPostExecute(String result) {
super.onPostExecute(result);
try {
adapter = new CustomArrayAdapter(this.mActivity, R.layout.list_item, result(result));
mc.update(adapter, mLv);
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
Alles anzeigen
Und dann noch meine update()
public void update(CustomArrayAdapter adapter, ListView lv){
System.out.println(adapter);
this.adapter = adapter;
this.listView = lv;
this.listView.setAdapter(this.adapter);
}
So funktioniert es erst einmal...wie gesagt, ich hatte das Problem vor ca. einem Jahr schon einmal, habe aber damals auf einem Mac gearbeitet den ich verkauft habe und natürlich weiss ich nicht mehr, wo ich die ganzen Projekte von damals gesichert habe...die Lösung von damals war deutlich sauberer....
Wer was zum meckern hat zu dieser Lösung, immer her damit...denn das geht bestimmt noch sauberer....
Danke!
EDIT:
Was natürlich total uncool ist -> will ich bei einem Tap auf einem ListItem zb. an den Title kommen, so muss ich folgendermaßen vorgehen in der update()
this.listView.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
long arg3) {
System.out.println(MainActivity.this.adapter.getItem(arg2).title);
}
});
Also wenn jemand die RICHTIGE Lösung kennt, bitte posten!!!
EDIT2:
Ich dreh heute noch einmal am Kabel...
Weiss nicht genau wie ich es beschreiben soll, aber alles was nun in der Update passiert, scheint irgendwie über die AsyncTask abgewickelt zu werden....
Natürlich will ich auch eine neue Activity aufrufen mit den Daten des geklickten Items:
public void update(CustomArrayAdapter adapter, ListView lv, Activity ac){
this.adapter = adapter;
this.listView = lv;
this.listView.setAdapter(this.adapter);
this.listView.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int arg2,
long arg3) {
Intent i = new Intent(MainActivity.this.getApplicationContext(), DetailActivity.class);
i.putExtra("date", MainActivity.this.adapter.getItem(arg2).date);
i.putExtra("title", MainActivity.this.adapter.getItem(arg2).title);
i.putExtra("content", MainActivity.this.adapter.getItem(arg2).content);
i.putExtra("imgUrl", MainActivity.this.adapter.getItem(arg2).imgUrl);
MainActivity.this.startActivity(i);
}
});
}
Alles anzeigen
Da bekomme ich eine NullPointerException auf MainActivity.this.getApplicationContext()...hab auch schon einiges anderes ausprobiert, keine abhilfe...verdammt.