我想讓用戶登錄時,當他進入我的應用程序的活動,他將通過FrameLayout看到他的用戶名,但如果他沒有登錄,他會看到一個登錄按鈕。我做了一個PreferenceData類來處理這個問題,我相信我的設置是正確的,但是當我登錄時,我仍然看到我的登錄按鈕,而不是我製作的FrameLayout。如果有幫助,可以使用數據庫來存儲用戶帳戶。如何根據登錄狀態從按鈕切換到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;
}
}
已登錄字符串來自PreferenceData Activity,我試圖做的是當用戶登錄到他/她的帳戶時,他們將在FrameLayout中看到它們的名稱,它由Imageview,TextView和按鈕組成,但是如果他們沒有登錄,他們只會看到LinearLayout父視圖中的一個按鈕,該按鈕表示Login會導致我的登錄活動。我試圖根據用戶是否登錄來呈現2個不同的視圖。 – Cranosaur
但你正在比較兩種不同的東西......你不能比較查看與字符串,你應該檢查什麼是記錄的用戶字符串,如果它存在,並做相應的行動 –
看到更新的答案。 –