有点点长
我现在要在非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里面,然后排版,排好的那种,还是像我这样,还是说怎么样的?
我初学,好奇,希望分享下有点点长
但是我好想找个人能讨论下,希望回帖,谢谢回帖。。 
控件JavaAndroid

解决方案 »

  1.   

    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);
    }
    }
      

  2.   

    这代码写的............
    帮你改了下...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);
        }
    }
      

  3.   

    其实最主要的思想还是在HandlerTest  保存一个activity的实例对象,然后调用回去