要實現的效果是 java
下面是個人理解
mController.sendAsyncMessage(LOGIN,userName,passWord);android
由於 mController 是 UserController,因此在 BaseController.java 中調取的 handleMessage(action, values);網絡
就是調取 UserController中 handleMessage 方法app
在 BaseActivity.java 中 ide
其實就是調取MainActivity.java 中 handlerMessage這個方法佈局
定義兩個基類this
BaseActivity.javaspa
package com.example.anroidtestdemo;.net
import android.app.Activity;
import android.os.Handler;
import android.os.Message;xml
public abstract class BaseActivity extends Activity implements IModeChangeListener {
//更改UI的方法
protected Handler mHandler = new Handler(){
@Override
public void handleMessage(android.os.Message msg) {
handlerMessage(msg);
};
};
//初始化數據
protected void initData() {
// default Empty implementn
}
//發送請求的方法
protected void handlerMessage(Message msg) {
// default Empty implementn
}
//初始化界面
protected void initController() {
// default Empty implementn
}
//初始化UI
protected abstract void initUI();
//實現一個更新 返回處理不一樣UI的action
@Override
public void onModeChanged(int action, Object... values) {
mHandler.obtainMessage(action, values[0]).sendToTarget();
}
}
BaseController.java 基類(主要用來作初始化接口,獲取getContext,獲取提交過來的數據進行處理)
package com.example.anroidtestdemo;
import android.content.Context;
public abstract class BaseController {
//初始化接口
protected IModeChangeListener mListener;
protected Context mContext;
public void setIModeChangeListener(IModeChangeListener listener) {
mListener=listener;
}
public BaseController(Context c) {
mContext=c;
}
/**
* @param action 一個頁面可能有多個網絡請求,用來區別這些請求的
* @param values 請求的數據
*/
public void sendAsyncMessage(final int action,final Object... values){
new Thread(){
@Override
public void run() {
handleMessage(action, values);
}
}.start();
}
/**
* 子類處理具體的需求的業務代碼
*/
protected abstract void handleMessage(int action,Object... values);
}
一個監聽接口
IModeChangeListener.java
package com.example.anroidtestdemo;
public interface IModeChangeListener {
/**
* onModeChanged 跟UI說界面須要修改
* @param action 返回處理不一樣UI的action
*/
public void onModeChanged(int action,Object... values);
}
MainActivity.java
package com.example.anroidtestdemo;
import android.os.Bundle;
import android.os.Message;
import android.util.Log;
import android.view.View;
import android.widget.EditText;
public class MainActivity extends BaseActivity {
private UserController mController;
public final static int LOGIN=1;
EditText userNameTv;
EditText passWordTv;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initUI();
initController();
}
@Override
public void handlerMessage(Message msg){
if(msg.what==LOGIN){
//進行更改UI,作跳轉
Log.i("620it","activity_login");
}
}
@Override
protected void initController() {
mController = new UserController(this);
//把當前的this 給UserController
mController.setIModeChangeListener(this);
}
//提交
public void submit(View view){
String userName = userNameTv.getText().toString();
String passWord = passWordTv.getText().toString();
//mController.sendAsyncMessage("login",userName,passWord);
//把數據提交給UserController 來處理
mController.sendAsyncMessage(LOGIN,userName,passWord);
}
//初始化UI
@Override
protected void initUI() {
userNameTv = (EditText)findViewById(R.id.userName);
passWordTv = (EditText)findViewById(R.id.passWord);
}
}
一個處理用戶的信息的類UserController.java
package com.example.anroidtestdemo;
import android.content.Context;
import android.text.TextUtils;
import android.util.Log;
public class UserController extends BaseController{
public UserController(Context c) {
super(c);
}
@Override
protected void handleMessage(int action, Object... values) {
String userName = (String) values[0];
String passWord = (String) values[1];
//表示登陸
if(action==MainActivity.LOGIN){
//表示登陸成功
if(!TextUtils.isEmpty(userName)&&!TextUtils.isEmpty(passWord)){
Log.i("620it","登陸成功告訴Activity");
//告訴Activity
mListener.onModeChanged(MainActivity.LOGIN,"sucess");
}
}
}
}
佈局文件 activity_main.xml
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent"> <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <TextView android:text="用戶名" android:layout_width="wrap_content" android:layout_height="wrap_content" /> <EditText android:layout_width="match_parent" android:layout_height="wrap_content" android:id="@+id/userName"/> <TextView android:text="密碼" android:layout_width="wrap_content" android:layout_height="wrap_content"/> <EditText android:layout_width="match_parent" android:layout_height="wrap_content" android:password="true" android:id="@+id/passWord"/> <Button android:text="提交" android:layout_width="wrap_content" android:layout_height="wrap_content" android:onClick="submit" /> </LinearLayout> </RelativeLayout>