3 Stimmen

Android onActivityResult NEVER aufgerufen

Meine onActivityResult-Methode wird nie aufgerufen. Ich verwende Android 2.2

Ich verwende einen Tabhost, bei dem TabHosts TabGroups enthalten, die wiederum einzelne Aktivitäten enthalten.

Eine meiner individuellen Aktivitäten hat folgende Absicht

 Intent intent = new Intent(); 
 intent.setType("image/*");
 intent.setAction(Intent.ACTION_GET_CONTENT);
 startActivityForResult(Intent.createChooser(intent,
                    "Select Picture"), 0);

dies lädt meine Galerie-Apps, ich verwende die Standard-Android-Galerie, um ein Bild auszuwählen, und wenn ich meine onActivityResult zurückkehren, ist meine Aktivität nicht aufgerufen.

Es sieht wie folgt aus - und ich habe einen Haltepunkt bei if(resultCode == 0) Daher sollte die Logik meines onActivityResults im Moment keine Rolle spielen.

 public void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (resultCode == 0) {
        if (requestCode == 0) {
            Uri selectedImageUri = data.getData();

            //OI FILE Manager
            filemanagerstring = selectedImageUri.getPath();

            //MEDIA GALLERY
            selectedImagePath = getPath(selectedImageUri);

            //DEBUG PURPOSE - you can delete this if you want
            if(selectedImagePath!=null)
                System.out.println(selectedImagePath);
            else System.out.println("selectedImagePath is null");
            if(filemanagerstring!=null)
                System.out.println(filemanagerstring);
            else System.out.println("filemanagerstring is null");

            //NOW WE HAVE OUR WANTED STRING
            if(selectedImagePath!=null)
                System.out.println("selectedImagePath is the right one for you!");
            else
                System.out.println("filemanagerstring is the right one for you!");
        }
    }
}

Lifecycle-Funktionen werden oft in unregelmäßigen Abständen für Aktivitäten innerhalb eines Tabhosts/einer Tabgroup aufgerufen. Daher habe ich überprüft, welche Lifecycle-Funktionen nach dem Schließen der Galerie aufgerufen werden (dies geschieht, sobald ich ein Bild in der Android-Galerie auswähle)

Der einzige, der aufgerufen wird, ist der onResume() in meiner TabHost-Aktivität. Also habe ich versucht, genau die gleiche onActivityResult() Methode in meiner TabHost-Klasse UND in der TabActivity-Klasse. Mit einem Haltepunkt an der gleichen Stelle am Anfang der Methode.

Keine dieser beiden Klassen wird aufgerufen.

Wie kann ich das Ergebnis aus der Galerie-App in meiner App erhalten, wenn keine der eingebauten Empfangsmethoden darauf reagiert?

Da ich weiß, dass mein Haupt-TabHost die onResume() aufgerufen, habe ich versucht, hinzugefügt Intent graphics = getIntent(); um zu sehen, ob es Daten von der Galerieauswahl erhalten würde, tut es nicht, also sehe ich nicht, wie ich die Logik in der onResume()-Methode entweder tun kann.

Lösungen willkommen! :)

0voto

Christine Punkte 5479

Die Art und Weise, wie onActivityResult aufgerufen wird, hängt vom LaunchMode Ihrer Activity (im Manifest) ab. Ich bin nicht sicher, ob das hier ein Problem sein kann.

-1voto

owen gerig Punkte 6099

Haben Sie @Override über Ihrem onActivityRestult?

(ich sehe einen alten Code, der dies tut, also bin ich mir nicht sicher, warum er benötigt wird) super.onactivityresult(requestcode, resultscode, data) als ersten Aufruf in der Methode aufrufen

auch meine Absichten hatten nicht diese anderen Sachen in ihnen startActivityForResult(Intent.createChooser(intent, "Bild auswählen"), 0); ich denke, es sollte einfach sein startActivityForResult(source.class, destination.class) sein; natürlich sollten Quelle und Ziel die Namen der Klassen sein

public class ImageSwitcherView extends Activity {
    int pics[] = { R.drawable.image000, R.drawable.image001,
            R.drawable.image002};

    private int currentIndex = 0;
    SharedPreferences preferences;
    Gallery gallery;
    ImageView fullPicView;

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.galleryview);
        Bundle extras = getIntent().getExtras();
        currentIndex = extras.getInt("bookmark");
        gallery = (Gallery) findViewById(R.id.Gallery01);

        gallery.setAdapter(new ImageAdapter(this));
        gallery.setSelection(currentIndex);
        gallery.setOnItemClickListener(new OnItemClickListener() {
            public void onItemClick(AdapterView parent, View v, int position,
                    long id) {
                currentIndex = position;
                // ---display the images selected---
                fullPicView = (ImageView) findViewById(R.id.imageView1);
                fullPicView.setImageResource(pics[currentIndex]);
                fullPicView.setOnClickListener(new OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        // TODO Auto-generated method stub
                        Intent myIntent = new Intent(ImageSwitcherView.this,
                                imageView.class);
                        int resID = pics[currentIndex];
                        myIntent.putExtra("resID", resID);
                        myIntent.putExtra("index", currentIndex);
                        startActivityForResult(myIntent, 1);
                    }
                });
            }
        });
    }

    public class ImageAdapter extends BaseAdapter {
        private Context context;
        private int itemBackground;

        public ImageAdapter(Context c) {
            context = c;
            // ---setting the style---
            TypedArray a = obtainStyledAttributes(R.styleable.Gallery1);
            itemBackground = a.getResourceId(
                    R.styleable.Gallery1_android_galleryItemBackground, 0);
            a.recycle();
        }

        // ---returns the number of images---
        public int getCount() {
            return pics.length;
        }

        // ---returns the ID of an item---
        public Object getItem(int position) {
            return position;
        }

        public long getItemId(int position) {
            return position;
        }

        // ---returns an ImageView view---
        public View getView(int position, View convertView, ViewGroup parent) {
            ImageView imageView = new ImageView(context);
            imageView.setImageResource(pics[position]);
            imageView.setScaleType(ImageView.ScaleType.FIT_XY);
            imageView.setLayoutParams(new Gallery.LayoutParams(150, 120));
            imageView.setBackgroundResource(itemBackground);
            return imageView;
        }
    }

    @Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);

        currentIndex = data.getIntExtra("bookmark", 0);
        gallery.setSelection(currentIndex);
        fullPicView.setImageResource(pics[currentIndex]);
    }

    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        if (keyCode == KeyEvent.KEYCODE_BACK
                || keyCode == KeyEvent.KEYCODE_HOME) {
            preferences = PreferenceManager.getDefaultSharedPreferences(this);

            SharedPreferences.Editor editor = preferences.edit();
            editor.putInt("bookmark", gallery.getSelectedItemPosition());
            editor.commit();
            finish();
        }
        return super.onKeyDown(keyCode, event);
    }

}

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X