Fragment-Aktivität fängt auf KeyDown und Verwendung in Fragment

Ich habe Fragment-Aktivität mit Pager:

List<Fragment> fragments = new Vector<Fragment>(); fragments.add(Fragment.instantiate(this, PastEventListFragment.class.getName(),bundle)); fragments.add(Fragment.instantiate(this, EventListFragment.class.getName(),bundle)); this.mPagerAdapter = new EventPagerAdapter(super.getSupportFragmentManager(), fragments); // ViewPager pager = (ViewPager)super.findViewById(R.id.viewpager1); pager.setAdapter(this.mPagerAdapter); pager.setCurrentItem(1); 

Ich fange an KeyDown Veranstaltung:

  • Fügen Sie Schatten auf der rechten und unteren Seite des Layouts hinzu
  • Mit Android-Probleme mit Sun Javax Gläser
  • Welche Designmuster werden auf Android verwendet?
  • Sperren Sie die Android-Orientierung als Landschaft während der App?
  • Sind Wetten auf Android verfügbar?
  • Android 2D Spielentwicklung
  •  @Override public boolean onKeyDown(int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_MENU) { } return super.onKeyDown(keyCode, event); } 

    Die Frage ist: Wie benutzt man das Ereignis in allen Fragmenten, die ich in dieser Aktivität instanziiert habe. Vielen Dank

  • LRUCache Eintrag neu anordnen bei der Verwendung get
  • Androide Speicherleck im Benachrichtigungsdienst
  • Wie bekomme ich eine funktionierende vertikale SeekBar in Android?
  • SQLiteReadOnlyDatabaseException: Versuch, eine readonly Datenbank zu schreiben (Code 1032)
  • Phonegap: ist es möglich, swipeLeft und SwipeRight Touch aus Javascript zu erkennen?
  • Checkbox deaktiviert, wenn ich Listenansicht auf Android scroll
  • 3 Solutions collect form web for “Fragment-Aktivität fängt auf KeyDown und Verwendung in Fragment”

    Was Sie tun können, ist, eine benutzerdefinierte Methode in Ihrer Fragmentklasse (n) zu definieren. Beispielsweise:

     public void myOnKeyDown(int key_code){ //do whatever you want here } 

    Und rufen Sie diese Methode auf, wenn ein Key-Down-Ereignis in Ihrer Aktivitätsklasse aufgerufen wird. Beispielsweise:

     @Override public boolean onKeyDown(int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_MENU) { ((PastEventListFragment)fragments.get(0)).myOnKeyDown(keyCode); ((EventListFragment)fragments.get(1)).myOnKeyDown(keyCode); //and so on... } return super.onKeyDown(keyCode, event); } 

    Wenn jemand interessiert ist, wie man es mit Boradcast macht:

    In deinem Fragment in onViewCreated

     @Override public void onViewCreated(View view, Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); // Register to receive messages. // We are registering an observer (mMessageReceiver) to receive Intents // with actions named "custom-event-name". LocalBroadcastManager.getInstance(this).registerReceiver(mMessageReceiver, new IntentFilter("activity-says-hi")); ...} // Our handler for received Intents. This will be called whenever an Intent // with an action named "custom-event-name" is broadcasted. private BroadcastReceiver mMessageReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { // Get extra data included in the Intent doSomethingCauseVolumeKeyPressed(); } }; 

    Ihr keyevent – Code, um in die Tätigkeit einzutreten

     @Override public boolean dispatchKeyEvent(KeyEvent event) { int action = event.getAction(); int keyCode = event.getKeyCode(); switch (keyCode) { case KeyEvent.KEYCODE_VOLUME_UP: if (action == KeyEvent.ACTION_DOWN) { sendBroadcast(); } return true; case KeyEvent.KEYCODE_VOLUME_DOWN: if (action == KeyEvent.ACTION_DOWN) { sendBroadcast(); } return true; default: return super.dispatchKeyEvent(event); } } 

    Ihr Broadcast-Absender:

     private void sendVolumeBroadcast(){ Intent intent = new Intent("activity-says-hi"); LocalBroadcastManager.getInstance(this).sendBroadcast(intent); } 

    Ich habe Unterrichts- und Fragmentklassen untergeordnet, um KeyEvents zu übergeben. Für mich sieht es klarer aus als das Senden lokaler Sendungen. Aber diese Lösung kann nicht so flexibel sein Wählen Sie die bevorzugte Art und Weise selbst.

    Hier ist die Aktivität:

     public abstract class KeyEventPassingActivity extends Activity { public interface KeyEventListener extends View.OnKeyListener { boolean isVisible(); View getView(); } private final List<KeyEventListener> keyEventHandlerList = new ArrayList<>(); @Override public boolean dispatchKeyEvent(KeyEvent event) { for (KeyEventListener handler : keyEventHandlerList) { if (handleKeyEvent(handler, event)) { return true; } } return super.dispatchKeyEvent(event); } void addKeyEventHandler(@NonNull KeyEventListener handler) { keyEventHandlerList.add(handler); } void removeKeyEventHandler(@NonNull KeyEventListener handler) { keyEventHandlerList.remove(handler); } /** * @return <tt>true</tt> if the event was handled, <tt>false</tt> otherwise */ private boolean handleKeyEvent(@Nullable KeyEventListener listener, KeyEvent event) { return listener != null && listener.isVisible() && listener.onKey(listener.getView(), event.getKeyCode(), event); } } 

    Und das Fragment:

     public abstract class KeyEventHandlingFragment extends Fragment implements KeyEventPassingActivity.KeyEventListener { @SuppressWarnings("deprecation") @Override public void onAttach(Activity activity) { super.onAttach(activity); if (activity instanceof KeyEventPassingActivity) { ((KeyEventPassingActivity) activity).addKeyEventHandler(this); } } @Override public void onDetach() { Activity activity = getActivity(); if (activity instanceof KeyEventPassingActivity) { ((KeyEventPassingActivity) activity).removeKeyEventHandler(this); } super.onDetach(); } } 

    Gist: https://gist.github.com/0neel/7d1ed5d26f2148b4168b6616337159ed

    Das Android ist ein Google Android Fan-Website, Alles ├╝ber Android Phones, Android Wear, Android Dev und Android Spiele Apps und so weiter.