2016-12-30 4 views
0

Ich habe vor kurzem eine einfache App gemacht, die es Benutzern ermöglicht, Informationen zu registrieren, sich anzumelden und abzumelden. Ich möchte die Komplexität dieser App erhöhen, indem ich eine Aktivität mit Registerkarten hinzufüge, die der Benutzer bei der Anmeldung sieht, und die dritte Registerkarte enthält eine Textansicht, die sie ausmeldet.Problem beim Hinzufügen von Logout-Button zu Tab Fragment-Klasse?

Hier ist, was ich vorher tat vor dem Hinzufügen von Registerkarten in meiner Hauptaktivität abzuzumelden:

public class MainActivity extends AppCompatActivity{ 
    private Button bLogout; 
    private Session session; 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     session = new Session(this); 
     if(!session.loggedin()){ 
      logout(); 
     } 
     bLogout = (Button) findViewById(R.id.bLogout); 
     bLogout.setOnClickListener(new View.OnClickListener(){ 
      @Override 
      public void onClick(View v){ 
       logout(); 
      } 
     }); 
    } 

    private void logout(){ 
     session.setLoggedin(false); 
     finish(); 
     startActivity(new Intent(MainActivity.this, LoginActivity.class)); 
    } 
} 

Nun, ich mag mein Tab3 Fragment Klasse das gleiche Konzept übertragen, aber ich erhalte immer Fehler. Hier ist die Tab3 Klasse ohne Fehler:

public class Tab3User extends Fragment{ 
    private TextView tvLogout; 
    private Session session; 
    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 
     View rootView = inflater.inflate(R.layout.tab3User, container, false); 

     tvLogout = (TextView) rootView.findViewById(R.id.tvLogout); 
     return rootView; 
    } 

} 

Die Fehler passieren, wenn ich versuche, eine neue Sitzung mit diesem als Kontext zu schaffen, sowie in der ‚startActivity‘ Methode in meiner Abmeldefunktion, wenn ich versuche "zu verwenden, Tab3User.this '. Der onClickListener scheint zu funktionieren, aber ich bin sehr neu in Android Dev, also bin ich mir sicher, dass ich nur einen Fehler mache. Hier ist mein Versuch, alles hinzuzufügen:

public class Tab3User extends Fragment{ 
    private TextView tvLogout; 
    private Session session; 
    @Override 
    public View onCreateView(LayoutInflater inflater, ViewGroup container, 
         Bundle savedInstanceState) { 
     View rootView = inflater.inflate(R.layout.tab3User, container, false); 

     tvLogout = (TextView) rootView.findViewById(R.id.tvLogout); 
     return rootView; 

     //error here under the "this" 
     session = new Session(this); 

     if(!session.loggedin()){ 
      logout(); 
     } 
     tvLogout.setOnClickListener(new View.OnClickListener(){ 
      @Override 
      public void onClick(View v){ 
       logout(); 
      } 
     }); 
    } 

    private void logout(){ 
     session.setLoggedin(false); 
     finish(); 
     startActivity(new Intent(Tab3User.this, LoginActivity.class)); 
    } 

} 

Danke für jede Hilfe. Ich habe online gesucht, aber viele Antworten auf Fragen wie diese sind sehr mehrdeutig, also entschied ich mich zu posten.

Antwort

0

Innerhalb eines Fragments müssen Sie getContext()/getActivity() verwenden.

session = new Session(getContext()); 
+0

Sie müssen daran denken, dass Fragmente vorhanden sind, um die Verwaltung komplexer Ansichten zu vereinfachen, aber sie sind keine eigenständigen Aktivitäten. – francescortiz

Verwandte Themen