如何修复侦听器类中的“错误:找不到符号方法startActivity(Intent)”?

时间:2018-12-31 08:41:38

标签: java android android-studio android-intent

通过在Intent中编写代码,我可以使Activity来打开其他MainActivity.java。 然后,我尝试使用一个类制作一个Intent,并在MainActivity.java中对其进行调用。但是变成错误。 如何解决这个问题?

当我在startActivity(numberIntent);中写MainActivity.java时没有错误,但是当我将这一行代码移到NumbersClickListener.java

出现错误:

  
      
  1. 错误:找不到符号方法startActivity(Intent)
  2.   
  3. 错误:不是封闭的类:MainActivity
  4.   

这是我的代码 在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 :(得分:1)

  

错误:在侦听器类中找不到符号方法startActivity(Intent)”?

因为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);
    }
}

答案 1 :(得分:0)

在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);
}
}    

答案 2 :(得分:0)

您正在另一个Java文件中定义NumbersClickListener。编译器无法知道,当您调用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);
}
});
}

答案 3 :(得分:0)

要启动Activity,您需要上下文。

就像这样pip install jupyter -U 在MainActivity中,由于Activity在内部扩展了Context,所以它不会出错。 NumbersClickListener不是扩展上下文。

因此,您可以使用View上下文开始活动

代替context.startActivity()
startActivity(numberIntent)

答案 4 :(得分:0)

在NumberClickListener类中,您可以执行以下操作
Context context = view.getContext(); Intent numberIntent = new Intent (context, NumberActivity.class); context.startActivity(numberIntent);

通过使用此代码,您可以将NumberClickListener与其他任何活动一起使用。 快乐的编码:)