Как исправить «ошибка: не удается найти метод символа startActivity (Intent)» в классе Listener? - PullRequest
0 голосов
/ 31 декабря 2018

Я могу сделать Intent, чтобы открыть другой Activity с записью кода в MainActivity.java.Затем я пытаюсь создать Intent с использованием класса и вызвать его в MainActivity.java.Но это становится ошибкой.Как решить эту проблему?

Когда я пишу startActivity(numberIntent); в MainActivity.java, ошибки не возникает, но когда я перемещаю эту строку кода в NumbersClickListener.java

Приходят ошибки:

  1. ошибка: не удается найти метод символа startActivity(Intent)
  2. ошибка: не включающий класс: MainActivity

Это мой код вMainActivity.java

package com.example.android.*****;

import android.content.Intent;
import android.os.Bundle;
import android.support.v4.widget.TextViewCompat;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity {

@Override

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    setContentView(R.layout.activity_main);

    NumbersClickListener clickListener = new NumbersClickListener();

    TextView numbers = (TextView)findViewById(R.id.numbers);

    numbers.setOnClickListener(clickListener);
}

в NumbersClickListener.java

package com.example.android.*****;

import android.content.Intent;
import android.view.View;
android.widget.Toast first
import android.widget.Toast;

OnClickListener should be written in capital letter
public class NumbersClickListener implements View.OnClickListener {
@Override
public void onClick(View view) {//.makeText(view.getContext(),
    "open the list of numbers", Toast.LENGTH_SHORT).show();
    Intent numberIntent = new Intent(MainActivity.this, 
NumbersActivity.class);
    startActivity(numberIntent);
}
}    

Ответы [ 5 ]

0 голосов
/ 31 декабря 2018

внутри вашего класса NumberClickListener вы можете сделать следующее
Context context = view.getContext(); Intent numberIntent = new Intent (context, NumberActivity.class); context.startActivity(numberIntent);

Используя этот код, вы можете использовать NumberClickListener с любым другим действием.Удачной кодировки :)

0 голосов
/ 31 декабря 2018

Для запуска Activity вам нужен Context.

Это будет примерно так context.startActivity() В MainActivity не выдается ошибка, потому что Activity внутренне расширяет Context.NumbersClickListener не расширен. Контекст.

Таким образом, вы можете начать действие, используя контекст просмотра

Заменить startActivity(numberIntent) на

view.getContext().startActivity(numberIntent);
0 голосов
/ 31 декабря 2018

Вместо MainActivity.this используйте его контекст.

Intent numberIntent = new Intent(context, NumbersActivity.class);
startActivity(numberIntent);

Обратите внимание на сделанные мной изменения

MainActivity.java

package com.example.android.*****;

import android.content.Intent;
import android.os.Bundle;
import android.support.v4.widget.TextViewCompat;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity {

@Override

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    setContentView(R.layout.activity_main);

    NumbersClickListener clickListener = new NumbersClickListener(MainActivity.this);   // Context while creating ClickListener Object

    TextView numbers = (TextView)findViewById(R.id.numbers);

    numbers.setOnClickListener(clickListener);
}

NumbersClickListener.java

package com.example.android.*****;

import android.content.Intent;
import android.view.View;
import android.widget.Toast;

public class NumbersClickListener implements View.OnClickListener {
Context context; 
NumbersClickListener(Context c){
    this.context = c;
} 
@Override
public void onClick(View view) {
Intent numberIntent = new Intent(context, NumbersActivity.class);
startActivity(numberIntent);
}
}    
0 голосов
/ 31 декабря 2018

Вы определяете NumbersClickListener в отдельном Java-файле.Компилятор не будет знать, что когда вы вызываете startActivity, вы ссылаетесь на Activity.startActivity

Если у вас нет более глубокой цели для NumbersClickListener.java, просто сделайте встроенное объявление View.Listener сделает

protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

NumbersClickListener clickListener = new NumbersClickListener();

TextView numbers = (TextView)findViewById(R.id.numbers);

numbers.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View view) {
        Intent numberIntent = new Intent(MainActivity.this,NumbersActivity.class);
        startActivity(numberIntent);
}
});
}
0 голосов
/ 31 декабря 2018

ошибка: не удается найти метод символа startActivity (Intent) ”в классе Listener?

Потому что, если startActivity(Intent) - это метод действия и его требуемый вызов из контекста

Если вы хотите позвонить startActivity(Intent) вне деятельности, вам нужно использовать Context.startActivity(numberIntent);

Используйте это

view.getContext().startActivity(numberIntent);

вместо этого

startActivity(numberIntent);

ОБРАЗЕЦ КОДА

public class NumbersClickListener implements View.OnClickListener {
    @Override
    public void onClick(View view) {
        Intent numberIntent = new Intent(view.getContext(),
                NumbersActivity.class);
        view.getContext().startActivity(numberIntent);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...