上一篇中完成了如上圖的UI部分的實現,現在繼續來講功能的實現,用戶登錄操作主要就是賬號列表顯示和選擇賬號登錄兩個功能其他的都是些簡單的輔助功能,首先是點擊id為iconSelectBtn的ImageButton時顯示用戶選擇窗口,這個時候去數據庫中獲取賬號記錄然後在選擇窗口中以列表方式顯示出來,通過上一篇已經知道Id為list的ListView控件來顯示賬號列表,首先是從數據庫中獲取所有的賬戶記錄然後設置默認選中的用戶賬號代碼如下:
private void initUser(){
//獲取賬號列表
dbHelper=new DataHelper(this);
userList = dbHelper.GetUserList(false);
if(userList.isEmpty())
{
Intent intent = new Intent();
intent.setClass(LoginActivity.this, AuthorizeActivity.class);
startActivity(intent);
}
else
{
SharedPreferences preferences = getSharedPreferences(Select_Name, Activity.MODE_PRIVATE);
String str= preferences.getString("name", "");
UserInfo user=null;
if(str!="")
{
user=GetUserByName(str);
}
if(user==null)
{
user=userList.get(0);
}
icon.setImageDrawable(user.getUserIcon());
iconSelect.setText(user.getUserName());
}
}
這個initUser() 初始賬號的方法在LoginActivity的onCreate中調用,主要完成兩件事情,第一件獲取通過userList = dbHelper.GetUserList(false);獲取所有的賬戶記錄,關於DataHelper前面已經有說過了,如果獲取的用戶記錄為空那麼就跳轉到用戶授權功能頁面讓用戶添加賬號,如果不為空那麼通過SharedPreferences去讀取用戶上一次選擇的賬號名稱,如果沒有或者數據庫裡賬號記錄不包括這個賬戶名稱那麼默認顯示記錄的第一個賬號和頭像,如果有那麼顯示這個賬戶的名稱和頭像。關於SharedPreferences,是android提供給開發者用來存儲一些簡單的數據用的,非常方便類似於網站的Cookie,在這裡我就是用這個來保存上一次用戶選擇的是哪個賬號,非常實用。
接下類首先為Id為list的ListView控件准備數據Adapter,這個Adapter非常簡單就是普通的adapter繼承BaseAdapter即可,代碼如下
public class UserAdapater extends BaseAdapter{
@Override
public int getCount() {
return userList.size();
}
@Override
public Object getItem(int position) {
return userList.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
convertView = LayoutInflater.from(getApplicationContext()).inflate(R.layout.item_user, null);
ImageView iv = (ImageView) convertView.findViewById(R.id.iconImg);
TextView tv = (TextView) convertView.findViewById(R.id.showName);
UserInfo user = userList.get(position);
try {
//設置圖片顯示
iv.setImageDrawable(user.getUserIcon());
//設置信息
tv.setText(user.getUserName());
} catch (Exception e) {
e.printStackTrace();
}
return convertView;
}
接下就是為這個ListView設定數據源Adapter,在賬號選擇窗口顯示的時候進行設置,添加到id為iconSelectBtn的ImageButton的OnClickListener中代碼如下:代碼
ImageButton iconSelectBtn=(ImageButton)findViewById(R.id.iconSelectBtn);
iconSelectBtn.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View v) {
......
dialog.show();
UserAdapater adapater = new UserAdapater();
ListView listview=(ListView)diaView.findViewById(R.id.list);
listview.setVerticalScrollBarEnabled(false);// ListView去掉下拉條
listview.setAdapter(adapater);
listview.setOnItemClickListener(new OnItemClickListener(){
@Override
public void onItemClick(AdapterView<?> arg0, View view,int arg2, long arg3) {
TextView tv=(TextView)view.findViewById(R.id.showName);
iconSelect.setText(tv.getText());
ImageView iv=(ImageView)view.findViewById(R.id.iconImg);
icon.setImageDrawable(iv.getDrawable());
dialog.dismiss();
}
});
}
});
通過上面代碼完成了賬號選擇的功能,接下來給id為login的ImageButton添加OnClickListener,使得點擊後以當前選擇賬號進入微博首頁,代碼如下:
代碼
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.login);
......
ImageButton login=(ImageButton)findViewById(R.id.login);
login.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View v) {
GoHome();
}
});
}
//進入用戶首頁
private void GoHome(){
if(userList!=null)
{
String name=iconSelect.getText().toString();
UserInfo u=GetUserByName(name);
if(u!=null)
{
ConfigHelper.nowUser=u;//獲取當前選擇的用戶並且保存
}
}
if(ConfigHelper.nowUser!=null)
{
//進入用戶首頁
Intent intent = new Intent();
intent.setClass(LoginActivity.this, HomeActivity.class);
startActivity(intent);
}
}
在上面的GoHome方法中ConfigHelper.nowUser是類型為UserInfo的static類型用來保存當前登錄賬號的信息,替代web中session使用。
最後添加如下方法,用來當這個登錄LoginActivity結束的時候保存當前選擇的賬戶名稱到SharedPreferences中,以便幫用戶記住登錄賬號的功能,就是前面的initUser() 初始賬號的方法中會獲取保存在SharedPreferences中的賬戶名稱,代碼如下:
代碼
@Override
protected void onStop() {
//獲得SharedPreferences對象
SharedPreferences MyPreferences = getSharedPreferences(Select_Name, Activity.MODE_PRIVATE);
//獲得SharedPreferences.Editor對象
SharedPreferences.Editor editor = MyPreferences.edit();
//保存組件中的值
editor.putString("name", iconSelect.getText().toString());
editor.commit();
super.onStop();
}
至此登錄頁面功能篇結束,請繼續關注下一篇。