Создание намерения в новом методе - PullRequest
4 голосов
/ 17 ноября 2010

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

У меня есть код:

private final View.OnClickListener btnClick = new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        switch (v.getId()) {
        case R.id.about_box:
            Intent i = new Intent(this, About.class);
            startActivity(i);
            break;
        }
    }
}

но Намерение дает мне ошибку:

Конструктор Intent (новый View.OnClickListener () {}, Class) имеет вид не определен

Есть идеи об обходных путях?

Спасибо.

Ответы [ 5 ]

10 голосов
/ 17 ноября 2010

Изменение

Intent i = new Intent(this, About.class);

до

Intent i = new Intent(TheCurrentClassName.this, About.class);
2 голосов
/ 17 ноября 2010

Проблема в том, что вы находитесь внутри другого класса и передаете Намерение в неправильном контексте.Вы должны передать это правильный контекст.Взгляните на пример ниже.

// your Activity

public class MyActivity extends Activity {

    Context ctx = null;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        ctx = getApplication();
    }

    private final View.OnClickListener btnClick = new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            switch (v.getId()) {
            case R.id.about_box:

                Intent i = new Intent(ctx, About.class);
                startActivity(i);
                break;
            }
        }
    }
1 голос
/ 15 ноября 2013

Просто изменить

Intent i = new Intent(this, About.class);

до

Intent i = new Intent(Classname.this, About.class);

Надеюсь, это сработает.

1 голос
/ 15 ноября 2013

Намерению нужен контекст. Однако использование этого ярлыка в функции onClick не разрешено должным образом. Различные способы предоставления текущего контекста в анонимном внутреннем классе: - используйте Context.this вместо этого. - вместо этого используйте getApplicationContext (). - Явно используйте имя класса MenuScreen.this. Вызовите функцию, которая объявлена ​​на правильном уровне контекста.

1 голос
/ 27 марта 2013

Измените строку намерения на: Intent intent = new Intent (ClassName.this, theNewClassName.class);

...