Filechooser und BackPressed

Q

qwert_zuiopue

Fortgeschrittenes Mitglied
6
Hallo,

in meinem Programm soll dem Benutzer durch Drücken eines Buttons ein Dateiauswahldialog angezeigt werden. Wird eine Datei ausgewählt, wird eine neue Activity gestartet. Das funktioniert soweit. Wird allerdings der zurück-Button gedrückt, dann verschwindet zwar der Dialog und das Hauptfenster rückt in den Vordergrund, aber in der Titelleiste steht immer noch "Dateiauswahldialog", wie ich diese Activity auch genannt habe. Außerdem lassen sich nun die Knöpfe auch nicht bedienen (die aus dem angezeigten Hauptmenü). Erst nach einem weiteren Drücken auf den Zurück-Button erfolgt das gewünschte verhalten.
Woran kann das liegen und welche Quelldateien soll ich eventuell posten?

Danke schonmal für eure Geduld mit mir ;)

Der ursprüngliche Beitrag von 16:28 Uhr wurde um 16:33 Uhr ergänzt:

Hier mal der Filechooser auf das Wesentliche reduziert:

public class Filechooser extends Activity {
private String[] mFileList;
private File mPath;
private static final String FTYPE = "";
private static final int DIALOG_LOAD_FILE = 1000;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);

Resources res = getResources();
streckeausw = String.format(res.getString(R.string.strauswahl));

loadFileList();
Dialog dialog = onCreateDialog(DIALOG_LOAD_FILE);
dialog.show();

}
private void loadFileList(){
String EXTERNAL_STORAGE = Environment.getExternalStorageDirectory().toString();
mPath = new File((EXTERNAL_STORAGE+"/"+"Android/data/"));
try{
mPath.mkdirs();
}
catch(SecurityException e){
Log.e("log", "unable to write on the sd card " + e.toString());
}
if(mPath.exists()){
FilenameFilter filter = new FilenameFilter(){
public boolean accept(File dir, String filename){
File sel = new File(dir, filename);
return filename.contains(FTYPE) || sel.isDirectory();
}
};
mFileList = mPath.list(filter);
}
else{
mFileList= new String[0];
}
}
protected Dialog onCreateDialog(int id){
Dialog dialog = null;
AlertDialog.Builder builder = new Builder(this);

switch(id){
case DIALOG_LOAD_FILE:
builder.setTitle("Auswahldialog");
if(mFileList == null){
Log.e("tag", "Showing file picker before loading the file list");
dialog = builder.create();
return dialog;
}
builder.setItems(mFileList, new DialogInterface.OnClickListener(){
public void onClick(DialogInterface dialog, int which){
Intent intent = new Intent(Filechooser.this, Next.class);
intent.putExtra("file",mFileList[which]);
startActivity(intent);
finish();
}
});
break;
}
dialog = builder.show();
return dialog;
}
@Override
public void onBackPressed() {
finish();
}
}

und so wird dieser aufgerufen:

public void onClick(View arg0) {
if(arg0 == dateiauswahl) {
Intent intent = new Intent(this,Filechooser.class);
startActivity(intent);
}
}
 
Möchte den Thread nochmal nach vorne holen, weil meine bisherigen Versuche alle erfolglos sind.
 
Wenn du die onCreateDialog-Methode benutzt, dann solltest du showDialog(DIALOG_LOAD_FILE) zum Aufrufen des Dialogs benutzen.

Code:
Dialog dialog = onCreateDialog(DIALOG_LOAD_FILE);
dialog.show();
Das hab ich noch nie so gesehen und hab keine Ahnung, ob das auch klappt ;-)
 
wie du siehst - es klappt so ja nicht :D

du machst oncreatedialog

da wird der dialog angezeigt. danach zeigst den dialog nochmal an. da muss dann ja etwas faul sein

also einfach

showDialog(DIALOG_LOAD_FILE)

dann solltest sich etwas verbessern
 
Gibt leider keine Verbesserung. Sogar schlechter, weil es jetzt auch noch deprecated ist ;).
 
das ist gleich deprecated wie vorher - ansonsten bau dir einen fragment dialog.

wenn du showdialog korrekt nutzt, dann tritt dein beschriebenes verhalten nicht auf. da wird noch was anderes quer liegen.

zb das hier
dialog = builder.show();

über oncreatedialog musst du niemals show aufrufen, das wird für die geregelt.

du musst builder.create() aufrufen um einen dialog zu bekommen. lies dir mal die doku dazu durch
 

Ähnliche Themen

M
  • MikelKatzengreis
Antworten
5
Aufrufe
130
swa00
swa00
Laser5001
Antworten
3
Aufrufe
650
swa00
swa00
W
Antworten
2
Aufrufe
744
rene3006
R
Zurück
Oben Unten