android其他类怎么调用继承自activity的类(mainactivity)中的非静态方法?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了android其他类怎么调用继承自activity的类(mainactivity)中的非静态方法?相关的知识,希望对你有一定的参考价值。

public class MainActivity extends Activity
private MainActivity();
private static MainActivity mainActivity;
public static MainActivity getmainActivity()
mainActivity=new MainActivity();
return mainActivity;


@Override
protected void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button dailButton= (Button) findViewById(R.id.bt_call);
dailButton.setOnClickListener(new Mylistener());



public class Mylistener implements OnClickListener

@Override
public void onClick(View v)
MainActivity mActivity=MainActivity.getmainActivity();
EditText telEditText=(EditText)mActivity.findViewById(R.id.et_telNum);
String number=telEditText.getText().toString();
Intent intent=new Intent();
intent.setAction(Intent.ACTION_CALL);
intent.setData(Uri.parse("tel:"+number));
mActivity.startActivity(intent);




着了监听类我不想把它放在mainActivity类的内部,但是在外部调用mainActivity的方法时还得new对象而且new出来的也不是同一个对象。能不能设计成单例的呢?这样好像编译不通过,有没有别的办法

据我所知的Activity机制,Activity不是由你来new对象出来的,而是由android系统创建对象的。Activity与Activity之间只能通过广播来通讯。非Activity类不可能直接调用Activity对象方法。本来监听类本来就是被监听对象所在容器的私有专属组件,没道理放类外。

当然,你非要把Mylistener放类外也不是绝对不行。这样修改:

public class MainActivity extends Activity
@Override
protected void onCreate(Bundle savedInstanceState) 
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
  Button dailButton= (Button) findViewById(R.id.bt_call);
  dailButton.setOnClickListener(new Mylistener(this));



public class Mylistener implements OnClickListener 
        private MainActivity mainActivity;
        public Mylistener(MainActivity activity)
                this.mainActivity=activity;
        
@Override
public void onClick(View v) 
EditText telEditText=(EditText)mainActivity.findViewById(R.id.et_telNum);
String number=telEditText.getText().toString();
Intent intent=new Intent();
intent.setAction(Intent.ACTION_CALL);
intent.setData(Uri.parse("tel:"+number));
mainActivity.startActivity(intent);


参考技术A 1,这个其它类不是从Activity继承而来,所以想通过MainActivity类(继承自Activity类,所以有一些方法可以直接使用,因为它遵守ANDROID下的一些框架)的方法来做一些事情。像发广播消息什么的。

2,MainActivity类在开始就被ONCREATE( )了,所以应该已经实例化了,但在其它类中怎么引用?怎么去getInstance把MainActivity的实例得到

3,在其它类直接MainActivity.this.xxx( )这样引用不行,报下面的错误:
No enclosing instance of the type MainActivity is accessible in scope.

两个 Activity

 

创建新的Activity的方式:

  1. 在相应的文件下 Ctrl + N  (Eclipse, Android中不知道是不是)

  2. 创建类,继承自Activity或者Activity的子孙类, 并在AndroidManifast.xml 中注册, 创建样式文件, 在setContentView()方法中调用这个样式文件

 

激活一个新的Activity:

  Intent intent = new Intent(上下文对象, 被激活的对象的class);

  startActivity(intent); 

 

当第二个Activity 激活时, 第一个Activity隐藏

  Activity_01.onPause()

  Acitvity_02.onCreate()

  Activity_02.onStart()

  Activity_02.onResume()

  Activity_01.onStop()

 

Activity的启动模式:

   

 

 

:  

  1. 不同的布局文件中id 是可以相同的

以上是关于android其他类怎么调用继承自activity的类(mainactivity)中的非静态方法?的主要内容,如果未能解决你的问题,请参考以下文章

android中怎么kill掉一个activity?

怎么修改android状态栏布局

两个 Activity

android下canvas画的直线怎么移动

Unity调用Android的Activity

AndroidManifest.xml中android:name功能介绍 利用自定义类继承Application 可以实现全局变量功能