2016-10-31 7 views
2

Meine enthält eine RecyclerView mit einer Liste von Elementen. Jeder Artikel verfügt über ein Klickereignis. Dieser Klick öffnet sich DetailsActivity.Dialogfeld "Ablehnen" bewirkt, dass Aktivität beendet wird

DetailsActivity hat einen FloatingActionButton, der einen Vollbilddialog öffnet (meine Klasse DetailDialogFragment erweitert DialogFragment).

DetailDialogFragment hat eine Up/Home-Taste mit einer Kündigung.

Das Problem: Wenn der Benutzer einen Klick über die Up-Taste führt, wird das Dialogfeld geschlossen, aber auch DetailsActivity verschwinden, und die App kehrt zum zurück.

Mögliche Ursache: Unter der Up-Taste des Dialogfelds befindet sich die Up-Taste des . Ist es möglich, zwei Klickereignisse auszulösen, wenn sich ein Dialog über einer Aktivität befindet und beide an derselben Stelle eine Hoch-Taste haben?


Edit: einige Code zu erhalten.

Öffnen Sie DetailsActivity von PanelActivity (Klicken auf ein Element in der RecyclerView).

Intent intent = new Intent(context, DetailsActivity.class); 
intent.putExtra("headerCode", headerCode.getText()); 
context.startActivity(intent); 

Hoch-Taste in DetailsActivity.

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    switch (item.getItemId()) { 
     // Respond to the action bar's Up/Home button 
     case android.R.id.home: 
      NavUtils.navigateUpFromSameTask(this); 
      return true; 
    } 
    return super.onOptionsItemSelected(item); 
} 

Vollbild-Dialog in DetailsActivity öffnen.

private void showCreateDetailDialog() { 
    FragmentManager fragmentManager = getSupportFragmentManager(); 
    DetailDialogFragment newFragment = new DetailDialogFragment(); 

    // The device is smaller, so show the fragment fullscreen 
    FragmentTransaction transaction = fragmentManager.beginTransaction(); 
    // For a little polish, specify a transition animation 
    transaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE); 
    // To make it fullscreen, use the 'content' root view as the container 
    // for the fragment, which is always the root view for the activity 
    transaction.add(android.R.id.content, newFragment) 
      .addToBackStack(null).commit(); 
} 

Und schließlich Up in DetailDialogFragment.

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    int id = item.getItemId(); 

    if (id == R.id.save) { 
     validateForm(); 
     return true; 
    } else if (id == android.R.id.home) { 
     // handle close button click here 
     dismiss(); 
     return true; 
    } 

    return super.onOptionsItemSelected(item); 
} 
+0

Post einige Quellcode – Krish

+0

@Krish Ich habe meine Post bearbeitet. – JCarlos

Antwort

0

Nein, ich glaube, das ist nicht möglich, vielleicht ein Problem des Geräts ist, testen Sie es auf einem Android-Emulator oder ein anderes Gerät. Können Sie Ihren Code teilen, um zu versuchen, Ihnen zu helfen?

+0

Bitte sehen Sie noch einmal. Und es passiert auch im Emulator. – JCarlos

1

Ich habe es nicht getestet, aber ich denke, das Problem ist hier, wo Sie ablehnen(). Möglicherweise benötigen Sie zuerst einen Verweis auf das DialogFragment. Ich denke, technisch sind Sie nur this.dismiss(); Aufruf wo diese die Aktivität entspricht dem Sie arbeiten in

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    int id = item.getItemId(); 

    if (id == R.id.save) { 
     validateForm(); 
     return true; 
    } else if (id == android.R.id.home) { 
     // handle close button click here 
     dismiss(); // problem is with this call 
     return true; 
    } 

    return super.onOptionsItemSelected(item); 
} 

Sie so etwas wie dies versuchen könnte.

private DetailDialogFragment detailFragment; 

private void showCreateDetailDialog() { 
    detailFragment = new DetailDialogFragment(); 
    FragmentManager fragmentManager = getSupportFragmentManager(); 

    FragmentTransaction transaction = fragmentManager.beginTransaction(); 
    transaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE); 
    transaction.add(android.R.id.content, newFragment).addToBackStack(null).commit(); 
} 

und jetzt innen onOptionsItemSelected():

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    int id = item.getItemId(); 

    if (id == R.id.save) { 
     validateForm(); 
     return true; 
    } else if (id == android.R.id.home) { 
     // handle close button click here 
     detailFragment.dismiss(); 
     return true; 
    } 

    return super.onOptionsItemSelected(item); 
} 
+0

Vielen Dank für Ihre Hilfe. Das Attribut '' 'detailFragment''' ist jedoch in der Aktivität definiert, und das Fragment ist eine andere Klasse. – JCarlos

Verwandte Themen