两个不同的类,怎么传递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);
}
}
activity类:
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(); //发送信息
}
});
}
}
要是我点一下Button按钮,程序立马就崩溃了,看来这样的传递参数是不行的,或者自己操作方式不对。。
所以想问下大家,到底怎样才能把参数从非activity传递到activity才是对的?
另外想讨论下,
其实我是想把activity里面的控件的那些监听的那些动作放在非activity那里实现的,
然后activity和非activity之间的控件是指向同一个地址的,所以我才会有
private static MainActivity mainActivity = new MainActivity();
这个,目的是想实现让各个类操控的控件相一致的,。。。
会这样把它们分开来,是因为在同一个activity里面的控件是在太多了,
感觉有点多东西,所以才把它们拆开来,弄成两个一个是main的activity,一个是实现
main的里面的控件实现函数。
另外想问一下,当一个mainActivity里面的控件过多的时候,你们是怎么排版,或者怎么处理的?
是不是都是放在同一个activity里面,然后排版,排好的那种,还是像我这样,还是说怎么样的?
我初学,好奇,希望分享下。。。
有点点长。。。
但是我好想找个人能讨论下,希望回帖,谢谢回帖。。
类 控件 Java Android
[解决办法]
activity中直接new一个你需要的类的对象,类对象集成各种监听接口应该就行了。。
比如最简单的
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);
}
}
[解决办法]
其实最主要的思想还是在HandlerTest? 保存一个activity的实例对象,然后调用回去