2013-03-31 3 views
0

Я пытаюсь сделать это, когда пользователь вошел в систему, когда он переходит к настройкам учетной записи. Активность моего приложения он увидит свое имя пользователя через FrameLayout, но если он не войдет в систему, он увидит кнопку Login.I сделал класс PreferenceData для обработки этого, который, я считаю, я правильно настроил, но когда я вошел в систему, я все еще вижу свою кнопку входа в систему вместо созданного мной FrameLayout. m, используя базу данных для хранения учетных записей пользователей, если это помогает.Как переключиться с Button на FrameLayout на основе состояния входа

Вот мой код

package com.fullfrontalgames.numberfighter; 

import android.app.Activity; 
import android.content.Intent; 
import android.content.SharedPreferences; 
import android.os.Bundle; 
import android.preference.PreferenceManager; 
import android.view.View; 
import android.widget.Button; 
import android.widget.FrameLayout; 
import android.widget.TextView; 

    public class AccountSettings extends Activity{ 

     @Override 
     protected void onCreate(Bundle savedInstanceState) { 
      // TODO Auto-generated method stub 
      super.onCreate(savedInstanceState); 
      setContentView(R.layout.accountsettings); 

      SharedPreferences appPref = 
        getSharedPreferences("com.fullfrontalgames.numberfighter.Settings_Preferences", MODE_PRIVATE); 

      String loggedin = PreferenceData.getUserLoggedInStatus(true); 




      Button LoginAS = (Button)findViewById(R.id.LoginAS); 
      Button Done = (Button)findViewById(R.id.done); 
      FrameLayout accountframe = (FrameLayout)findViewById(R.id.AccountFrameLayout); 
      TextView accounttv = (TextView)findViewById(R.id.AccountTextView); 

      DBAdapter db = new DBAdapter(this); 
      db = db.open(); 



      accountframe.setVisibility(View.GONE); 
      LoginAS.setVisibility(View.GONE); 


      Done.setOnClickListener(new View.OnClickListener() { 

       @Override 
       public void onClick(View v) { 
        // TODO Auto-generated method stub 
        Intent Intent = new Intent(AccountSettings.this,activity_main.class); 
        startActivity(Intent); 
       } 
      }); 


      if (accountframe.equals(loggedin)) 
      { 
       accountframe.setVisibility(View.VISIBLE); 
       accounttv.setText((CharSequence) appPref); 

      } else { 

       accountframe.setVisibility(View.GONE); 
       LoginAS.setVisibility(View.VISIBLE); 
       LoginAS.setOnClickListener(new View.OnClickListener() { 

        @Override 
        public void onClick(View v) { 
         // TODO Auto-generated method stub 
         startActivity (new Intent ("com.fullfrontalgames.numberfighter.Login")); 

        } 
       }); 

      } 







     } 

    } 



    PreferenceData Class 

    package com.fullfrontalgames.numberfighter; 
import android.content.Context; 
import android.content.SharedPreferences; 
import android.content.SharedPreferences.Editor; 
import android.preference.PreferenceManager; 
import android.view.View.OnClickListener; 


public class PreferenceData { 
    static final String PREF_LOGGEDIN_USERNAME = "logged_in_username"; 
    static final String PREF_USER_LOGGEDIN_STATUS = "logged_in_status"; 

    public static SharedPreferences getSharedPreferences(Context ctx) { 
     return PreferenceManager.getDefaultSharedPreferences(ctx); 
    } 


    public static void setLoggedInUsername(Context ctx, String Username) 
    { 
     Editor editor = getSharedPreferences(ctx).edit(); 
     editor.putString(PREF_LOGGEDIN_USERNAME, Username); 
     editor.commit(); 
    } 

    public static String getLoggedInUsername(Context ctx) 
    { 
     return getSharedPreferences(ctx).getString(PREF_LOGGEDIN_USERNAME, ""); 
    } 

    public static void setUserLoggedInStatus(Context ctx, boolean status) 
    { 
     Editor editor = getSharedPreferences(ctx).edit(); 
     editor.putBoolean(PREF_USER_LOGGEDIN_STATUS, status); 
     editor.commit(); 
    } 

    public static boolean getUserLoggedInStatus(Context ctx) 
    { 
     return getSharedPreferences(ctx).getBoolean(PREF_USER_LOGGEDIN_STATUS, false); 
    } 

    public static void clearLoggedInUsername(Context ctx) 
    { 
     Editor editor = getSharedPreferences(ctx).edit(); 
     editor.remove(PREF_LOGGEDIN_USERNAME); 
     editor.remove(PREF_USER_LOGGEDIN_STATUS); 
     editor.commit(); 
    } 


    public static void setUserLoggedInStatus(OnClickListener onClickListener, 
      boolean status) { 
     // TODO Auto-generated method stub 

    } 


    public static String getUserLoggedInStatus(boolean b) { 
     // TODO Auto-generated method stub 
     return null; 
    } 



    } 

ответ

1

Вы принимаете вид (FrameLayout):

FrameLayout accountframe = (FrameLayout)findViewById(R.id.AccountFrameLayout); 

и сравнивая его в строку:

if (accountframe.equals(loggedin)) 

Пожалуйста, вы можете объяснить Что ты пытаешься сделать? и где хранится строка loggedin?

Я думаю, что это должно быть:

if ((CharSequence) appPref.toString().equals(loggedin)) 
{ 
... 
} 

Edit:

если это возвращает, если пользователь вошел в систему или нет:

String loggedin = PreferenceData.getUserLoggedInStatus(true); 

, то вы должны написать что-то вроде этого:

if (loggedin.equals("true")) 
{ 
    accountframe.setVisibility(View.VISIBLE); 
    accounttv.setText((CharSequence) appPref); 
} 

Второе редактирование: Вы получаете Boolean параметр:

public static boolean getUserLoggedInStatus(Context ctx) 
{ 
    return getSharedPreferences(ctx).getBoolean(PREF_USER_LOGGEDIN_STATUS, false); 
} 

Таким образом, вы должны хранить его в булев параметр, и передавать свой контекст деятельности или это:

boolean loggedin = PreferenceData.getUserLoggedInStatus(YouactivityName.this); 

if (loggedin == true) 
{ 
    accountframe.setVisibility(View.VISIBLE); 
    accounttv.setText((CharSequence) appPref); 
} 
+0

Строка журнала была из Activity PreferenceData. То, что я пытаюсь сделать, - это когда пользователь регистрируется в своей учетной записи, они будут видеть свое имя в FrameLayout, состоящем из Imageview, TextView и кнопки, но если они не заносятся в журнал, они просто видят кнопку из родительского представления LinearLayout, в которой говорится о входе, которое приведет к моей активности входа. Я пытаюсь представить 2 разных представления на основе того, был ли пользователь зарегистрирован или нет. – Cranosaur

+0

, но вы сравниваете две разные вещи ... вы не можете сравнить View со строкой, вы должны проверить, что является зарегистрированной пользовательской строкой, если она существует, и делать ваши действия соответственно. –

+0

см. Обновленный ответ. –

1
boolean loggedin = PreferenceData.getUserLoggedInStatus(this); 

if (loggedin == true) 
{ 
    accountframe.setVisibility(View.VISIBLE); 
    accounttv.setText((CharSequence) appPref); 
} 

попробуйте это, надеюсь, вам это поможет.

+0

Итак, я могу использовать вашу первую строку в любой деятельности, которая У меня есть? – Castiblanco

+0

Да, я думаю, что ваша логика такова, что после успешного входа вы вызываете метод setUserLoggedInStatus (Context ctx, boolean status) и paasing true status it.right? –

Смежные вопросы