繁体   English   中英

使用另一个扩展自Activity的类的方法

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM