0

ich die PauseHandler umzusetzen versuchen hier beschrieben:Aufruf SupportFragmentManager von PauseHandler Implementierung

https://stackoverflow.com/a/8122789/1977132

Meine Tätigkeit ist ein ActionBarActivity, der Code in der process Methode, die einen Dialog bringt gibt den Fehler Cannot resolve method 'getSupportFragmentManager'

nach dem Vorschlag hier: https://stackoverflow.com/a/27425568/1977132

ich versuchte, es zu getFragmentManag zu ändern er(), aber dann bekomme ich die Fehler Cannot resolve method 'show(android.app.FragmentManager(), java.lang.String'

Ich habe geklebt, was ich glaube, hier der entsprechende Code sein:

import android.support.v4.app.DialogFragment; 
import android.support.v4.app.Fragment; 
import android.support.v4.app.FragmentActivity; 
import android.support.v4.app.FragmentManager; 
import android.support.v4.app.FragmentTransaction; 
import android.support.v7.app.ActionBarActivity; 

public class PlaySession extends ActionBarActivity implements View.OnClickListener { 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     if (savedInstanceState == null) { 
      final Fragment state = new State(); 
      final FragmentManager fm = getSupportFragmentManager(); 
      final FragmentTransaction ft = fm.beginTransaction(); 
      ft.add(state, State.TAG); 
      ft.commit(); 
     } 
    } 

    public static class rescanDialogBox extends DialogFragment { 
     final static String TAG = "RESCAN"; 

     public static rescanDialogBox newInstance(int title) { 
      rescanDialogBox frag = new rescanDialogBox(); 
      Bundle args = new Bundle(); 
      args.putInt("title", title); 
      frag.setArguments(args); 
      return frag; 
     } 

     @Override 
     public Dialog onCreateDialog(Bundle savedInstanceState) { 
      String title = "Rescan?"; 
      String message = "No Bluetooth LE devices found. Do you want to rescan? If you keep getting this message check the battery of your Bluetooth device."; 

      AlertDialog.Builder myDialogBuilder = new AlertDialog.Builder(getActivity()); 
      myDialogBuilder.setTitle(title); 
      myDialogBuilder.setMessage(message); 
      myDialogBuilder.setPositiveButton("YES", 
       new DialogInterface.OnClickListener() { 
        public void onClick(DialogInterface dialog, int whichButton) { 
         ((PlaySession) getActivity()).yesRescan(); 
        } 
       }); 
      myDialogBuilder.setNegativeButton("NO", 
       new DialogInterface.OnClickListener() { 
        public void onClick(DialogInterface dialog, int whichButton) { 
         ((PlaySession) getActivity()).noRescan(); 
        } 
       }); 

      AlertDialog myDialog = myDialogBuilder.create(); 
      myDialog.setCanceledOnTouchOutside(false); 

      return myDialog; 
     } 
    } 

    public void yesRescan() { 
     //rescan 
    } 

    public void noRescan() { 
     //do nothing 
    } 

    final static class State extends Fragment { 
     static final String TAG = "State"; 
     public PauseHandlerImplementation handler = new PauseHandlerImplementation(); 

     @Override 
     public void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      setRetainInstance(true); 
     } 

     @Override 
     public void onResume() { 
      super.onResume(); 
      handler.setActivity(getActivity()); 
      handler.resume(); 
     } 

     @Override 
     public void onPause() { 
      super.onPause(); 
      handler.pause(); 
     } 

     @Override 
     public void onDestroy() { 
      super.onDestroy(); 
      handler.setActivity(null); 
     } 
    } 


    static class PauseHandlerImplementation extends PauseHandler { 
     protected Activity activity; 

     final void setActivity(Activity activity) { 
      this.activity = activity; 
     } 

     @Override 
     final protected void processMessage(String toDo) { 
      final Activity activity = this.activity; 

      if (activity != null) { 
       if(toDo.equals("OFFER_RESCAN")) { 
        //offer rescan 
        DialogFragment newFragment = new rescanDialogBox(); 
        newFragment.show(activity.getSupportFragmentManager(), rescanDialogBox.TAG); 
        activity.getSupportFragmentManager().executePendingTransactions(); 

       } else if (toDo.equals("OFFER_DEVICES")) { 
        //offer devices 
       } 
      } 
     } 
    } 
} 

Natürlich gibt es auch den Code für die PauseHandler ist die Handler und den Code erweitert für das Dialogfeld aber das war/ist in Ordnung ok so scheint nicht relevant.

EDIT Added-Code für das Rescan Dialogfeld dieses Dialogfeld hat gut funktioniert, bevor ich den PauseHandler hinzugefügt, aber ich benötigte Unterstützung für den Fall hinzufügen, wo der Benutzer aus der App navigiert, während der Scan läuft, daher die Notwendigkeit für die PauseHandler

+0

was rescanDialogBox ist ändern sollte? Könnten Sie den Code dafür teilen? – jayeshsolanki93

+0

@ jayeshsolanki93 Ich habe den Code für die rescanDialogBox hinzugefügt, danke für deine Ideen. – user1977132

+0

Ok, rescanDialogBox sieht gut aus. – jayeshsolanki93

Antwort

0

Zunächst ist ActionBarActivity jetzt veraltet. Sie sollten wahrscheinlich AppCompatActivity verwenden, um die vorherige Android-Version zu unterstützen.

Zweitens, sollten Sie den Container angeben, wo Sie Ihr State-Fragment mit der Methode .replace(int ontainerViewId, Fragment fragment) setzen. Ihre Methode sollte so aussehen:

final Fragment state = new State(); 
final FragmentManager fm = getSupportFragmentManager(); 
final FragmentTransaction ft = fm.beginTransaction(); 
ft.replace(R.id.your_container_id, state); 
ft.commit(); 

Hoffe es hilft!

+1

Das State-Fragment selbst hat keine Benutzeroberfläche also wird nicht zu einem Container hinzugefügt (onCreateView gibt null zurück - siehe https://developer.android.com/reference/android/app/FragmentTransaction.html). Danke für den Vorschlag. – user1977132

0

hatte ich das gleiche Problem wie bei Ihnen, ich glaube, Sie

import android.support.v4.app.DialogFragment 

zu

import android.app.DialogFragment; 

in Ihrer DialogFragment Klasse