【发布时间】:2016-01-04 06:02:03
【问题描述】:
我用普通的 ID+密码和 Facebook 登录按钮制作了一个登录页面。我将 SharedPrefrerence 字符串保存为“选项”,值为 0 或 1,以识别用户是否以正常或 facebook 按钮登录。对于注销,我的布局在操作栏中有一个图标,单击该图标会打开另一个带有注销按钮的片段。问题是当用户通过 Facebook 按钮登录而不是转到具有注销按钮的片段时,只要单击图标(在操作栏中),用户就会注销。它不会使用注销按钮转到另一个片段。
Fragment with logout button
public class Prof_settings extends Fragment{
private SQLiteHandler db;
private SessionManager session;
Button logout;
public static final String PREFS_NAME = "MyApp_Settings";
String option;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// TODO Auto-generated method stub
View v = LayoutInflater.from(getActivity()).inflate(R.layout.prof_settings, null);
// SqLite database handler
db = new SQLiteHandler(getActivity().getApplicationContext());
// session manager
session = new SessionManager(getActivity().getApplicationContext());
SharedPreferences settings = getActivity().getSharedPreferences(PREFS_NAME, getActivity().MODE_PRIVATE);
option = settings.getString("option", "");
if (!session.isLoggedIn()) {
logoutUser();
}
logout = (Button)v.findViewById(R.id.logout);
logout.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
logoutUser();
}
});
return v;
}
private void logoutUser() {
if(option.equals("1")){ //for facebook login
LoginManager.getInstance().logOut();
Intent login = new Intent(getActivity(), LoginActivity.class);
startActivity(login);
getActivity().finish();
}else if(option.equals("0")){ // for normal login
session.setLogin(false);
db.deleteUsers();
// Launching the login activity
Intent intent = new Intent(getActivity(), LoginActivity.class);
startActivity(intent);
getActivity().finish();
}
}
}
First Layout Code
public class ProfileFrag extends Fragment{
ImageView pic, grid, list, calender, map;
LinearLayout LL_grid, LL_list;
GridView GV;
TextView profile_name;
private SQLiteHandler db;
private SessionManager session;
String option, name;
Bundle bundle;
public static final String PREFS_NAME = "MyApp_Settings";
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setHasOptionsMenu(true);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View v = LayoutInflater.from(getActivity()).inflate(R.layout.frag_profile, null);
profile_name = (TextView)v.findViewById(R.id.profile_name);
SharedPreferences settings = getActivity().getSharedPreferences(PREFS_NAME, getActivity().MODE_PRIVATE);
option = settings.getString("option", "");
if(option.equals("1")){
name = settings.getString("name", "");
profile_name.setText(name);
}else if(option.equals("0")){
// SqLite database handler
db = new SQLiteHandler(getActivity().getApplicationContext());
// session manager
session = new SessionManager(getActivity().getApplicationContext());
// Fetching user details from SQLite
HashMap<String, String> user = db.getUserDetails();
name = user.get("name");
// Displaying the user details on the screen
profile_name.setText(name);
}
////////////////////////////////// Settings Icon Function Starts ////////////////////////////////////////////////////////////////////////////////
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
inflater.inflate(R.menu.activity_main_actions, menu);
super.onCreateOptionsMenu(menu,inflater);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
super.onOptionsItemSelected(item);
switch (item.getItemId()) {
case R.id.settings:
Prof_settings newFragment = new Prof_settings();//global variable
FragmentManager fragmentManager = getFragmentManager();
fragmentManager.popBackStack();
FragmentTransaction ft =fragmentManager.beginTransaction();
ft.replace(R.id.fragment_place, newFragment,"Order");
ft.commit();
default:
break;
}
return true;
}
/////////////////////////////////////////////// Settings Icon Function Ends ////////////////////////////////////////////////////////////////////
}
【问题讨论】: