繁体   English   中英

从扩展MainActivity的类中调用public void

[英]Call public void from class that extends MainActivity

我试图在另一个类中扩展Main Activity,以便可以使用已经在Main Activity中创建的对象。

如果我有主要活动:

public class MainActivity extends AppCompatActivity {


    public ImageView jani;

    public Context main;

    public classextended janitest = new classextended();

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        jani = findViewById(R.id.jani);

        main=this;

        janitest.janiaha();




        Log.d("jani","FAK");



    }

}


enter code here

然后是扩展MainActivitiy的新类:

enter code here

public class classextended extends MainActivity {


    public void janiaha(){

        jani.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

                Toast.makeText(main, "YES YOU KNOW YOUR JAVA!!!", Toast.LENGTH_SHORT).show();



            }
        });

    }
}

我如何才能访问public void janiaha()? 还是我做错了一切:)?

我得到的是崩溃--是的,我可以使用静态类,但据我所知内存泄漏将是一个真正的问题。

您不能调用未在主类上定义的子类的方法。 如果要从MainActivity派生多个类,请使其成为MainActivity上受保护的函数,该函数可以是抽象的或具有默认实现,然后在子类中重写它。 如果您不打算拥有多个子类,那么我质疑甚至拥有一个子类的价值。

您不能从子类到父类调用方法。 如果你想让一个函数做类似的工作,那么你可以创建一个普通的类来做。 或者您可以在本堂课中做到这一点。 您只需将方法设为“静态”即可。

    public static void janiaha(ImageView jani){

    jani.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {

            Toast.makeText(main, "YES YOU KNOW YOUR JAVA!!!", Toast.LENGTH_SHORT).show();



        }
    });

}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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