如何在单独的Java类的OnClick()方法中实现startActivity()?

时间:2018-05-20 09:38:25

标签: java android android-intent onclicklistener

所以我制作了三个3个java文件。

  1. 主要活动类
  2. ButtonListener.java(单独的java类)
  3. PurpleActivty.class(活性)
  4. 我在ButtonListener.java文件中实现了OnclickListener和OnClick方法。

    我想在ButtonListener文件的onClick(View v)中启动intent startActivity()。但它在startActivity()行上抛出错误。

    我知道我可以在onCreate of AvtivityClass下制作OnClick方法,但我不想这样做,因为我已经创建了一个可以处理所有按钮侦听器的单独java文件。

    文件MainActivity.java

    public class MainActivity extends AppCompatActivity  {
    
       public Button intentPurple;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            intentPurple=findViewById(R.id.button5);
           Intent gg= new Intent(MainActivity.this, PurpleActivty.class);
            ButtonListener B= new ButtonListener(gg);
    
            intentPurple.setOnClickListener(B);
    
        }
    
    }
    

    文件ButtonListener.java

    public class ButtonListener  implements View.OnClickListener {
         private Intent g;
    
    
        public ButtonListener(Intent F) {
    
            this.g=F;
        }
     @Override
    
            public void onClick(View v) {
                switch(v.getId()) {
    
                    case R.id.button5:
    
              startActivity(g);  // this line is error(red underline g) error msg
               break;            //is "startActivity() in ContextCompat cannot be 
                                //applied to"
                }}}
    

    有什么方法可以解决这个问题吗?

2 个答案:

答案 0 :(得分:0)

我相信

public ButtonListener(Intent F) {

    this.g=F;
}

你不必使用它,因为变量名称是不同的。 除此之外,我相信

 Intent gg= new Intent(**MainActivity.this**, PurpleActivty.class);

MainActivity.this导致问题,因为您在另一个类中,您应该将MainActivity的上下文作为参数传递并使用

 context.startActivity(g);

OR

view.getContext().startActivity(g);

答案 1 :(得分:0)

您需要从活动的上下文中调用brew install python@2,而不是从自定义处理程序类调用。重构startActivity到此:

ButtonListener

然后像这样打电话给你的听众:

public class ButtonListener implements View.OnClickListener {
    private Intent g;
    private Context caller;

    public ButtonListener(Intent f, Context caller) {
        this.g = f;
        this.caller = caller;
    }

    @Override
    public void onClick(View v) {
        switch(v.getId()) {
            case R.id.button5:
                caller.startActivity(g);
                break;
        }
    }
}