两个不同的类,怎么传递handler参数?顺便讨教下点问题。。
有点点长。。。
我现在要在非activity的类里面,传递参数给activity那里,但是发觉传不了,这是我的测试代码,
求过路人给点思路。。。
非activity普通类:
public class HandlerTest {
private Handler handler = null;
private MainActivity mainActivity = null;
public HandlerTest(){
}
public void init(){//初始化
mainActivity = MainActivity.getMainActivity();
handler = mainActivity.getHandler();
}
public void sendMsg(){//发送信息
Message msg = new Message();
msg.what = MainActivity.TEST;
handler.sendMessage(msg);
}
}
public class MainActivity extends Activity {
public static final int TEST = 0;
private TextView tv = null;
private HandlerTest ht = null;
private Button b = null;
private static MainActivity mainActivity = new MainActivity();
public static MainActivity getMainActivity() {//其实目的是返回本身这个类,想获得里面的控件
return mainActivity;
}
private Handler handler = new Handler(){
public void handleMessage(Message msg){
switch(msg.what){
case TEST:{
Toast.makeText(MainActivity.this, "test handler", Toast.LENGTH_SHORT).show();
tv.setText("hello");
}break;
default:break;
}
}
};
public Handler getHandler() {
return handler;
}
public void setHandler(Handler handler) {
this.handler = handler;
}
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tv = (TextView)this.findViewById(R.id.TextViewTestID);
b = (Button)this.findViewById(R.id.ButtonTestID);
ht = new HandlerTest();
b.setOnClickListener(new OnClickListener() {
public void onClick(View arg0) {
ht.init();
ht.sendMsg(); //发送信息
}
});
}
}
比如最简单的
package com.lxl;
import android.content.Context;
import android.graphics.Color;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.View.OnLongClickListener;
import android.view.View.OnTouchListener;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.RelativeLayout;
import android.widget.RelativeLayout.LayoutParams;
import android.widget.TextView;
public class MyImageView extends Button implements OnClickListener,
OnLongClickListener, OnTouchListener {
private int doornum = 0;
private RelativeLayout layout;
private LayoutParams lp;
private TextView advicetext;
private boolean flag = false;// 当flag为false的时候表示关门,为true的时候表示开门
public MyImageView(Context ParentContext, int doornum,
RelativeLayout layout, TextView advicetext) {
// TODO Auto-generated constructor stub
super(ParentContext);
this.setOnClickListener(this);
this.setOnLongClickListener(this);
this.setOnTouchListener(this);
this.doornum = doornum;
this.lp = new LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT,
ViewGroup.LayoutParams.WRAP_CONTENT);
this.lp.setMargins(0, 10, 0, 10);
this.layout = layout;
this.advicetext = advicetext;
closeDoor();
}
@Override
public boolean onTouch(View v, MotionEvent event) {
// TODO Auto-generated method stub
return false;
}
@Override
public boolean onLongClick(View v) {
// TODO Auto-generated method stub
return false;
}
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
System.out.println("你点击的按钮为" + doornum + "号按钮");
if (this.flag) {
closeDoor();
} else {
openDoor();
}
this.flag = !this.flag;
this.advicetext.setText(doornum + "号门处于" + (flag ? "开启" : "关闭") + "状态");
}
public LayoutParams getLayoutParams() {
return this.lp;
}
public void closeDoor() {
this.setBackgroundColor(Color.RED);
}
public void openDoor() {
this.setBackgroundColor(Color.GREEN);
}
public void setLeft() {
this.lp.addRule(RelativeLayout.ALIGN_PARENT_LEFT);
}
public void setRight() {
this.lp.addRule(RelativeLayout.ALIGN_PARENT_RIGHT);
}
public void addView() {
this.layout.addView(this, lp);
}
}

import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;
public class SecActivity extends Activity {
public static final int TEST = 0;
public TextView tv = null;
private HandlerTest ht = null;
private Button b = null;
private Handler handler = new Handler() {
public void handleMessage(Message msg) {
switch (msg.what) {
case TEST:
Toast.makeText(SecActivity.this, "test handler", Toast.LENGTH_SHORT).show();
tv.setText("hello");
break;
default:
break;
}
}
};
public Handler getHandler() {
return handler;
}
public void setHandler(Handler handler) {
this.handler = handler;
}
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_sec);
tv = (TextView) this.findViewById(R.id.editText1);
b = (Button) this.findViewById(R.id.button1);
ht = new HandlerTest(this);
b.setOnClickListener(new OnClickListener() {
public void onClick(View arg0) {
ht.init();
ht.sendMsg(); // 发送信息
}
});
}
}
import android.app.Activity;
import android.os.Handler;
import android.os.Message;
public class HandlerTest {
private Handler handler = null;
private SecActivity mainActivity = null;
public HandlerTest(Activity ac) {
mainActivity = (SecActivity) ac;
}
public void init() {// 初始化
handler = mainActivity.getHandler();
}
public void sendMsg() {// 发送信息
Message msg = new Message();
msg.what = SecActivity.TEST;
handler.sendMessage(msg);
}
}