![](/img/trans.png)
[英]Call method in an activity from another class that extends Application
[英]Using a method from another class that Extends from an Activity
我在使用另一个来自Activity的扩展类的方法时遇到问题。 我有一个代码需要在每个Activity中重复,所以我用这个代码创建了一个类,当我试图在其他类中使用该方法时出现错误例如:
头等舱:
public class first extends Activity
public void onCreate(){
second s = new second();
s.myMethod();
}
第二类:
public class second extends Activity
public void myMethod(){}
这样我得到NullPointerExption。
头等舱:
public class first extends Activity
public void onCreate(){
Context context = getApplicationContext();
second s = ((second)context);
s.myMethod(context );
}
第二类:
public class second extends Activity
Context context ;
public void myMethod(Context context){
this.context = context;
}
这样我就得到了InvocationTargetException。
这是我的代码:
MainActivity - 头等舱:
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}//onCreate
public void ClickMe(View V) {
Toast.makeText(this, "ClickMe", Toast.LENGTH_SHORT).show();
Context context = getApplicationContext();
menuSetup myMenu = ((menuSetup)context);
myMenu.SetMenuListView();
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
public boolean onOptionsItemSelected(MenuItem item) {// Action Bar buttons
switch (item.getItemId()) {
case R.id.action_settings:
SlidingDrawer myS = (SlidingDrawer) findViewById(R.id.slidingDrawer1);
myS.animateToggle();
break;
}
return super.onOptionsItemSelected(item);
}
}
menulList - 第二类:
public class menuSetup extends Activity {
MenuAdapter adapter;
ListView myList;
int myPosiition;
public void SetMenuListView() {
myList = (ListView) findViewById(R.id.listView1);
adapter = new MenuAdapter(this);
myList.setAdapter(adapter);
myList.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View v, int position, long id) {
myPosiition = position;
StartActivityMethod();
}
});
}
private void StartActivityMethod() {
switch (myPosiition) {
case 0:
Intent item2 = new Intent(this, Item2.class);
startActivity(item2);
finish();
break;
case 1:
Intent item3 = new Intent(this, Item3.class);
startActivity(item3);
finish();
break;
case 2:
Toast.makeText(this, "Missing Page", Toast.LENGTH_SHORT).show();
break;
}
}
}
您不应该创建Activity类的实例。 它不是正常的课程。 它有自己的生命周期。 您只在清单中声明了活动。
而是创建一个Uitlity类,您可以将Context传递给Utility类的构造函数并在那里使用它。
引用Raghav Sood
通过将Activity视为普通的Java类,最终得到一个空上下文。 由于Activity中的大多数方法都在其Context上调用,因此您将获得空指针异常,这就是您的应用程序崩溃的原因。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.