Как реализовать startActivity () внутри метода OnClick () отдельного Java-класса? - PullRequest
0 голосов
/ 20 мая 2018

Итак, я сделал три 3 java файла.

  1. основной класс активности
  2. ButtonListener.java (отдельный класс java)
  3. PurpleActivty.class (активность)

Я реализовал метод OnclickListener и OnClick внутри моего файла ButtonListener.java.

Я хочу запустить намеренный startActivity () внутри моего onClick (View v) файла ButtonListener.Но это выдает ошибку в строке startActivity ().

Я знаю, что могу создать метод OnClick в onCreate of AvtivityClass, но я не хочу этого делать, поскольку я создал отдельный файл 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 голосов
/ 20 мая 2018

Вам необходимо вызвать 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;
        }
    }
}

Затем позвоните своему слушателю так:

intentPurple = findViewById(R.id.button5);
Intent gg = new Intent(MainActivity.this, PurpleActivty.class);
ButtonListener b = new ButtonListener(gg, MainActivity.this);
intentPurple.setOnClickListener(b);
0 голосов
/ 20 мая 2018

Я верю в

public ButtonListener(Intent F) {

    this.g=F;
}

, вам не нужно использовать это, потому что имена переменных разные.Кроме этого, я считаю, что

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

MainActivity.this вызывает проблему, поскольку вы находитесь в другом классе, вы должны передать контекст MainActivity в качестве параметра и использовать

 context.startActivity(g);

ИЛИ

view.getContext().startActivity(g);
...