2016-03-29 18 views
0

Ich habe eine Tätigkeit, bei der eine Schaltfläche, wenn Schaltfläche geklickt wird I-Fragment auf auf logout anrufen möchten, Wie kann ich tun gibt That.Its wirft Fehler wie ...Wie man Fragment von einer Klasse in Android anruft?

Hier ist mein Code

public class CLoginSessionManagement { 
// User name (make variable public to access from outside) 
public static final String s_szKEY_MOBILE = "agentCode"; 
// Email address (make variable public to access from outside) 
public static final String s_szKEY_PASSWORD = "pin"; 
// Sharedpref file name 
private static final String s_szPREF_NAME = "LoginData"; 
// All Shared Preferences Keys 
private static final String s_szIS_LOGIN = "IsLoggedIn"; 
public SharedPreferences m_LoginPref; 
public Editor m_Editor; 
public Context m_Context; 
public int n_PrivateMode = 0; 

// Constructor 
public CLoginSessionManagement(Context m_Context) { 
    this.m_Context = m_Context; 
    m_LoginPref = m_Context.getSharedPreferences(s_szPREF_NAME, n_PrivateMode); 
    m_Editor = m_LoginPref.edit(); 
} 

// Registeration Session Management.... 
public void setLoginData(String mobile, String pin) { 
    m_Editor.putBoolean(s_szIS_LOGIN, true); 
    m_Editor.putString(s_szKEY_MOBILE, mobile); 
    m_Editor.putString(s_szKEY_PASSWORD, pin); 
    m_Editor.commit(); 
} 

/** 
* checkLogin() session wil check user Login status 
* If false it will redirect user to Login page 
* Else won't do anything 
*/ 
public boolean checkLogin() { 
    if (!isLogin()) { 
     Intent i = new Intent(m_Context, CMainActivity.class); 
     i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
     m_Context.startActivity(i); 
     return true; 
    } 
    return false; 
} 

/** 
* Get stored Login session data 
*/ 
public HashMap<String, String> getLoginDetails() { 
    HashMap<String, String> user = new HashMap<>(); 
    // user name 
    user.put(s_szKEY_MOBILE, m_LoginPref.getString(s_szKEY_MOBILE, null)); 
    // user email id 
    user.put(s_szKEY_PASSWORD, m_LoginPref.getString(s_szKEY_PASSWORD, null)); 
    // return user 
    return user; 
} 

public boolean isLogin() { 
    return m_LoginPref.getBoolean(s_szIS_LOGIN, false); 
} 

/** 
* Clear session details 
*/ 
public void logoutUser() { 
    // Clearing all data from Shared Preferences 
    m_Editor.clear(); 
    m_Editor.commit(); 
    Fragment m_oLoginScreen = new CLoginScreen(); 
    FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction(); 
    fragmentTransaction.replace(R.id.container, m_oLoginScreen, null); 
    fragmentTransaction.addToBackStack(null); 
    fragmentTransaction.commit(); 
} 
} 

Gibt mir einen Fehler bei getSupportfragmentManager in LogOut Abschnitt. hier ist mein Code, von wo aus ein Click-Ereignis

else if (id == R.id.LogOut) { 
     s_oCloginSession.checkLogin(); 
     s_oCloginSession.logoutUser(); 
     Fragment m_oLoginScreen = new CLoginScreen(); 
     FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction(); 
     fragmentTransaction.replace(R.id.container, m_oLoginScreen, null); 
     fragmentTransaction.addToBackStack(null); 
     fragmentTransaction.commit(); 
    } 
+0

Welche Fehler haben Sie sehen ? Fügen Sie die Ausnahme aus dem Protokoll ein. – szym

+0

Hat Ihre Klasse die Methode getSupportFragmentManager? Was ist der Fehler, den Sie bekommen? –

+0

Was ist der Fehler, siehst du? – user4232

Antwort

1

Zuerst Ihre Klasse nicht die Methode, die Sie versuchen, getSupportFragmentManager zu nennen.

wenn Ihr Kontext in dieser Klasse eine Tätigkeit ist, die eine Klasse mit dieser Methode erweitert Sie

((AppCompactActivity)m_Context).getSupportFragmentManager(); 

wenn nicht verwenden können, haben Sie zwei Möglichkeiten, machen Sie Ihre Aktivitätsklasse statt AppCompactActivity oder benutzen getFragmentManager erstreckt.

+0

Sie können es aus dem Kontext zugreifen, müssen Sie es in Aktivität konvertieren und dann darauf zugreifen – Jois

+0

Danke Ihre Antwort funktioniert für mich .... – Nitin

+0

Wenn es half, können Sie es als Antwort markieren und/oder upvote es? –

0

Entweder versuchen getFragmentManager() statt oder AppCompatActivity Klasse für Ihre Aktivität zu verlängern.

+0

Ich habe bereits meine Aktivität erweitert – Nitin

+0

Verwenden Sie getFragmentManager() – sanya5791

0

Sie können getSupportFragmnetManager nur von innerhalb der Aktivität erweiterten Klassen wie AppcombatActvity oder FragmentActivity aufrufen. Um den Support Fragment Manager von anderen Klassen zu erhalten, nutzen Sie den Kontext der Anwendung. Ersetzen

FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction(); 

mit

FragmentTransaction fragmentTransaction = ((<activity_name>)m_Context).getSupportFragmentManager().beginTransaction(); 
+0

aber was ist nicht Aktivität Klasse – Nitin

+0

Ich möchte von non actiuvity Klasse – Nitin

+0

aufrufen Sie können entweder den Kontext in Aktivität umwandeln oder Sie können die Aktivität als Argument übergeben und Rufen Sie den Support-Fragment-Manager von dort auf. –

0

Sie können nicht auf getSupportFragmentManager() zugreifen, da Ihre Klasse Activity nicht erweitert. Wenn Sie auf die Methode in einer Nicht-Aktivitätsklasse zugreifen möchten. Wenn Sie diesen Kontext übergeben, können Sie die Methode wie folgt aufrufen:

final Activity activity = (Activity) context; 

    activity.getSupportFragmentManager() 

Vielen Dank Ich hoffe, das war hilfreich.

+0

Ich habe das schon gemacht, aber nicht nützlich – Nitin

+0

Sie konvertierten Kontext zu Aktivität? – Jois

+0

und immer noch funktioniert es nicht? – Jois

0
final Activity activity = (Activity) context; 
      FragmentManager mFragmentManager = (activity).getSupportFragmentManager(); 
    // if getSupportFragmentManager() doesnt work try with getFragmentManager and change the import of fragment 
      FragmentTransaction fragmentTransaction = mFragmentManager.beginTransaction(); 
       fragmentTransaction.replace(R.id.containerView, new CLoginScreen()); 
       fragmentTransaction.addToBackStack(null); 
       getSupportFragmentManager().popBackStack(); 
       fragmentTransaction.commit(); 
0

verwenden:

public static void t(Activity activity){ 
    LayoutInflater inflater = activity.getLayoutInflater(); 
    View layout = inflater.inflate(R.layout.custom_toast, null); 
    TextView text = (TextView) layout.findViewById(R.id.toastId); 

} 
Verwandte Themen