19

Próbuję otworzyć fragment po naciśnięciu powiadomienia na pasku powiadomień. Moja aplikacja struktura jest następująca:Jak otworzyć stronę fragmentu, po naciśnięciu powiadomienia w Androidzie

  • zasadę działania z menu nav szuflady
  • jakiś fragment, które są otwarte od menu

    b.setOnClickListener(new OnClickListener() { 
    
         @SuppressWarnings({ "deprecation", "static-access" }) 
         public void onClick(View v) { 
    
         w_nm=(NotificationManager) getActivity().getSystemService(getActivity().NOTIFICATION_SERVICE); 
    
         Notification notify=new Notification(R.drawable.notnificationlogo,waternoti,System.currentTimeMillis()); 
    
         Intent notificationIntent = new Intent(getActivity(), Abc.class); 
    
    
    
         PendingIntent pending=PendingIntent.getActivity(getActivity(), 0,notificationIntent, 0); 
    
    
         notificationIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP 
           | Intent.FLAG_ACTIVITY_SINGLE_TOP); 
    
         notify.flags = Notification.DEFAULT_LIGHTS | Notification.FLAG_AUTO_CANCEL; 
    
          notify.setLatestEventInfo(getActivity(),waternoti,waternoti1, pending); 
    
         w_nm.notify(0, notify); 
    

Czy ktoś może mi powiedzieć jak połączyć z kolejnym fragmentem strona (obecny kod jest w klasie, która rozszerza fragment)

+0

Broadcast Receiever? http://developer.android.com/reference/android/content/BroadcastReceiver.html – James

+0

Czy mógłbyś to rozwinąć, jestem nowy dla Androida –

Odpowiedz

24

Będziesz musiał rozpocząć swoją podstawową działalność jak zwykle, ale dodaj trochę informację do intencji o tym, który fragment menu zostanie otwarty. Tutaj możesz zobaczyć, jak można to zrobić: https://stackoverflow.com/a/8610916/1652236

To zależy od dodatkowych informacji, które pobrałeś w metodzie "onCreate()", w której będziesz używał do uruchamiania/ładowania fragmentu.

Zobacz tutaj na przykład, jak praca z fragmentami: http://www.tutorialspoint.com/android/android_fragments.htm http://developer.android.com/guide/components/fragments.html

on zamiar uruchomić tę procedurę będzie coś takiego:

Intent notificationIntent = new Intent(getActivity(), Abc.class); 
notificationIntent.putExtra("menuFragment", "favoritesMenuItem"); 

aw swojej działalności podstawowej:

@Override 
protected void onCreate(final Bundle savedInstanceState) 
{ 
    String menuFragment = getIntent().getStringExtra("menuFragment"); 

    FragmentManager fragmentManager = getFragmentManager(); 
    FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); 

    // If menuFragment is defined, then this activity was launched with a fragment selection 
    if (menuFragment != null) { 

     // Here we can decide what do to -- perhaps load other parameters from the intent extras such as IDs, etc 
     if (menuFragment.equals("favoritesMenuItem")) { 
      FavoritesFragment favoritesFragment = new FavoritesFragment(); 
      fragmentTransaction.replace(android.R.id.content, favoritesFragment); 
     } 
    } else { 
     // Activity was not launched with a menuFragment selected -- continue as if this activity was opened from a launcher (for example) 
     StandardFragment standardFragment = new StandardFragment(); 
     fragmentTransaction.replace(android.R.id.content, standardFragment); 
    } 
} 
+0

Tutaj w tej aplikacji muszę wygenerować własną wiadomość jako powiadomienie i zachowałem to w jednej z opcji menu na pasku akcji, użyłem tylko jednej czynności, a resztę wszystkie są fragmentami. –

+0

Jak rozumiem, musisz rozpocząć działalność podstawową z pewnym fragmentem. Typ fragmentu musi zależeć od typu powiadomienia. Czy to prawda? – Vito

+0

Nie wszystkie fragmenty, tylko kilka stron fragmentów powinno zależeć od typu powiadomienia. –

2

powinieneś także dodać .commit(); i ft1.addToBackStack (null);, tak aby nie nakładał się on na prevoius jeden i jeśli nie będziesz reklamować tego ft1.addToBackStack (null); na plecach aplikacja wyjdzie więc dodać to w zależności od funkcjonalności

String menuFragment = getIntent().getStringExtra("menuFragment"); 

ft1 = getSupportFragmentManager().beginTransaction(); 

ft1.addToBackStack(null); 

ft1.replace(R.id.frame_container, favoritesFragment).commit(); 
4
notificationIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP 
      | Intent.FLAG_ACTIVITY_SINGLE_TOP) 

Jako intencję zestaw Flagi: FLAG_ACTIVITY_SINGLE_TOP „onCreate()” nie będzie wywoływana, gdy działalność została utworzona, należy zamiast tego otrzymują parametry w metodzie o nazwie "onNewIntent()".