Activity über umwegen laden

  • Antworten:6
  • Bentwortet
Volkan Aydin
  • Forum-Beiträge: 187

08.09.2014, 23:18:40 via Website

Hallo zusammen, ich habe etwas versucht, das eigentlich einwandfrei geklappt hat. bis auf..

Ich möchte eine ListView aufrufen, der haken daran ist, dieser wird über einen AlertBuilder gestartet
,da ich mir dachte, mach doch einfach eine Class für alle Alerts.

function_alertBuilder ab = new function_alertBuilder();
ab.showAlert(this,getResources().getString(R.string.pu_MenuNamen), null, null, auswahl,null);

Nun ist es so, das es gleich von anfang an geklappt hat.

Die Klasse sieht nun so aus :

package com.awad.awad;

class function_alertBuilder{

public void showAlert(final Context ctx,final String titel,final Cursor c,String column,String[] value,final String id){
final db_syncAll_options db = new db_syncAll_options(ctx);

int viewGroup = android.R.layout.simple_list_item_1;
        AlertDialog.Builder builderSingle = new AlertDialog.Builder(ctx);
             builderSingle.setIcon(R.drawable.icon_m);
             builderSingle.setTitle(titel);
             final ArrayAdapter<String> arrayAdapter = new ArrayAdapter<String>(ctx,viewGroup); 
             if(c != null){
                do{
                     arrayAdapter.add(db.string(c, column));

                     if(id != null){

                          arrayAdapter.getItemId(Integer.parseInt(db.string(c, id)));
                     }
                }while(c.moveToNext());  
             }
             if(value != null){

                 for(int i=0;i<value.length;i++){


                     arrayAdapter.add(value[i]);

                 }
             }





             builderSingle.setNegativeButton("Abbrechen",
                     new DialogInterface.OnClickListener() {

                         @Override
                         public void onClick(DialogInterface dialog, int which) {
                             dialog.dismiss();
                         }
                     });

             builderSingle.setAdapter(arrayAdapter,
                     new DialogInterface.OnClickListener() {


                        @Override
                         public void onClick(DialogInterface dialog, int which) {
                             Log.i("shwoSingleDialog","oncklicklistener activ");
                             String strValue = arrayAdapter.getItem(which);

                             String id = Integer.toString(which);


                             loadOption(strValue,id,c,titel,ctx);

                             dialog.dismiss();
                         }
             });
             builderSingle.show();// TODO Auto-generated method stub

}

protected void loadOption(String strValue,String id,Cursor c,String titel,Context ctx){
Log.i("Geladen","value= "+ strValue + "/ id ="+id+"/ titel ="+titel);

if(titel.equals(ctx.getResources().getString(R.string.pu_MenuNamen))){
    projektUebersicht pu = new projektUebersicht();

    if(strValue.equals(ctx.getResources().getString(R.string.pu_telefonbuch))){
    pu.loadTelefonbuch();   
    }

    if(strValue.equals(ctx.getResources().getString(R.string.pu_datenbank))){
    }

    if(strValue.equals(ctx.getResources().getString(R.string.pu_neu))){

    }



}

}

}

Das klappt also. nun aber möchte ich ja wieder zurück zur Activity, und die befehle entgegen nehmen.. per

projektUebersicht pu = new projektUebersicht();

    if(strValue.equals(ctx.getResources().getString(R.string.pu_telefonbuch))){
    pu.loadTelefonbuch();   
    }

Funktioniert auch tadellos. nur jetzt kommt das Problem, gleich bei der ersten funktion die ich starten wollte, hätte es eine neue Activity laden sollen, und das von derActivity wo ich gestartet bin..

Log.i("Load", "UserPhonebook");
        Intent intent = new Intent(projektUebersicht.this,telefonbuchAuslesen.class);

Anhand vom Log, weiss ich das es ankommt, doch weshalb funktioniert das Intent nicht mehr?

Antworten
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

09.09.2014, 07:08:56 via App

Also das Einzige was nicht tut ist das Intent oder?
Dem m7sst du ja auch einen Gültigen Context übergebe. Apso this wenn der Code aus einer Actitity kommt.
Aber noch mehr.

Du erstellst eine leere Instanz deiner Activity, rufst von dieser eine Methode auf und willst dann die Instanz weiter nutzen im intent.
Das kann nicht funktionieren, da die Klasse ProjektÜbersicht nie am Activity lifecycle war.

D.h. Du musst dem Intent statt ProjektÜbersicht.this den aktuellen Context übergeben.

LG Pascal

LG Pascal //It's not a bug, it's a feature. :) ;)

Antworten
Volkan Aydin
  • Forum-Beiträge: 187

17.09.2014, 21:53:44 via Website

Sorry, ich bekamm keine Mail mehr, dachte nicht das noch jemand geantwortet hat..... dann kann ich dieses ausgelagerte Problem ja endlich mal angehen ;) ich dachte mir schon sowas, aber als ich den Context immer weitergab hat es eben auch nicht funktioniert.... vieleicht habe ich ja aber irgendwo anders noch ein Bock drin gehabt.... :)

ich habe letzten 2 Tage nach einen fehler geucht, dabei war es einfach ein leerzeichen vor dem <?php .... das beim response schwierigkkeiten machte..., ich habe bestimmt jeden Code 3 mal geschrieben :)

Antworten
Volkan Aydin
  • Forum-Beiträge: 187

18.09.2014, 20:38:57 via Website

Also, ich habe heute das ganze nochmal in angriff genommen...

Ich habe mehrere arten versucht nun den Context weiterzugeben, genauergesagt in drei verschiedenen arten.

Die erste in der LoadTelefonbuch() Klasse selbst.

Context ctn = this;
Intent intent = new Intent(ctn,telefonbuchAuslesen.class);
startActivity(intent); 

Das funktioniert nicht..

Dan habe ich es über die Activitiy selbst versucht indem ich final gesetzt habe

also

final Context ctx = this;

loadTelefonbuch(){
Intent intent = new Intent(ctx,telefonbuchAuslesen.class);
startActivity(intent);
}

will auch nicht,

die dritte art war das übergeben bei jeder Klasse die aufgerufen wurde.... funktioniert ebenfalls nicht?

Welches währe die richtige art? oder sind alle falsch?

Ich muss das ganze ja nicht in ein RunOnUITread packen oder so????

Antworten
Volkan Aydin
  • Forum-Beiträge: 187

20.09.2014, 19:38:56 via Website

Hammer! funktioniert :), kurz bevor ich dieses Problem angegangen bin, habe ich noch ein Vorschlag von eclipse probiert, was ebenfalss funktioniert.... Ich habe keinen blasen SChimmer was das genau soll, aber nun habe ich sogr zwei möglichkeiten ;)

((projektUebersicht) ctx).loadTelefonbuch(ctx); 

Vielen Dank!

Antworten