当前位置: 首页 > 面试题库 >

那实际上是什么“ MainActivity.this not enclosing class”错误?

薛俊美
2023-03-14
问题内容

我在执行以下代码时遇到问题。

实际上,我想将图像用作指向另一个页面或活动的链接。怎么做

“ MainActivity.this不包含类”问题实际上是什么?这是一个代码

我有2个班级,第一个是MainActivity

第二个是MainActivity2

两者都在Single MainAcitvity.java文件中

主要活动:

import android.os.Bundle;
import android.support.design.widget.FloatingActionButton;
import android.support.design.widget.Snackbar;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.View;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.ImageButton;
import android.widget.Toast;
import android.content.Intent;
import android.util.Log;


public class MainActivity extends AppCompatActivity {
ImageButton androidImageButton;
        @Override
    protected void onCreate (Bundle savedInstanceState){
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);

        FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
        fab.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)
                        .setAction("Action", null).show();
            }
        });





        androidImageButton = (ImageButton) findViewById(R.id.imageButton_android);
        androidImageButton.setOnClickListener (new View.OnClickListener(){

            @Override
            public void onClick(View v) {
                Toast.makeText(MainActivity.this, "It works", Toast.LENGTH_LONG).show();
            }

            });



    }

    public boolean onCreateOptionsMenu (Menu menu){
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.menu_main, menu);
        return true;
    }

    public boolean onOptionsItemSelected (MenuItem item){
        // Handle action bar item clicks here. The action bar will
        // automatically handle clicks on the Home/Up button, so long
        // as you specify a parent activity in AndroidManifest.xml.
        int id = item.getItemId();

        //noinspection SimplifiableIfStatement
        if (id == R.id.action_settings) {
            return true;
        }

        return super.onOptionsItemSelected(item);
    }
}

MainActivity2:

class MainActivity2 extends MainActivity implements OnClickListener, View.OnClickListener {

ImageButton Btn;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    ImageButton Btn = (ImageButton) findViewById(R.id.imageButton_android);
    Btn.setOnClickListener(this);
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
    // Inflate the menu; this adds items to the action bar if it is present.
    getMenuInflater().inflate(R.menu.menu_main, menu);
    return true;
}

@Override
public void onClick(View v) {
    Log.i("clicks","You Clicked B1");
    Intent i;
    i = new Intent( MainActivity.this, MainActivity2.class); *//The problem is here wih MainActivity.this//
    startActivity(i);
}
}

任何人都可以解决该错误,并帮助我解决代码。


问题答案:

一个 封闭类 正是这听起来像-这是一类 封闭 (不继承)在给定的语句类。为了引用封闭的类实例,必须在 this 关键字前面加上类名-
因此MainActivity.this

class ABC {
    class XYZ extends Activity {
    } 
}

在上面的简单示例中,ABC是的 封闭XYZ

您的错误是告诉您MainActivity在语句位置该类不是封闭类,因此this无法访问该类的实例。

您的MainActivity2继承MainActivity,但该语句中没有任何 封闭的
Intent(...)。由于Intent()构造函数需要一个Context参数,并且您的MainActivity2
this实例继承自Context(上下文->活动-> MainActivity->
MainActivity2),因此您可以仅将其this用作参数:

所以代替:

 i = new Intent( MainActivity.this, MainActivity2.class);

用:

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


 类似资料:
  • 问题内容: 在构建RPM软件包的过程中,我必须指定BuildRoot,以后将在%install中使用它来侵害$ RPM_BUILD_ROOT。我一直认为$ RPM_BUILD_ROOT是RPM执行打包的假安装。然后,在使用RPM软件包进行安装时,它将安装到实际位置。例如: 我认为$ RPM_BUILD_ROOT仅用于打包过程,并且在某些方面,当用户执行“ rpm -ivh package.rpm”

  • 我正试图把我的头缠在Apache Mesos上,需要澄清几个项目。 我对Mesos的理解是,它是一个安装在集群中的每个物理/VM服务器(“节点”)上的可执行文件,然后提供一个Java API(不知何故),将每个单独的节点视为计算资源(CPU/RAM/等)的集体池。因此,对于使用Java API编码的程序,他们只看到一组资源,而不必担心如何/在哪里部署代码。 因此,首先,我在这里的理解可能是根本错误

  • 我在看一个典型的for循环: 我对int I=1后的分号很满意:它是一个声明新变量的语句。如果i也是一个语句,为什么后面没有分号? 另一个例子。我打开Jshell并放置以下内容: 换句话说,命令可以工作,与是否有分号无关。我希望没有它就无法工作。 最后一个示例(改编自关于

  • 我已经回答了一个关于Python中的绝对导入的问题,我认为通过阅读Python2.5更改日志和附带的PEP我理解了这个问题。但是,在安装Python2.5并尝试创建一个从__future__import absolute_import中正确使用

  • 我只是第一次涉足iOS开发,我必须做的第一件事就是实现一个自定义容器视图控制器——让我们称之为SideBarViewController——它交换了几种可能的视图控制器中的哪一种它显示的子视图控制器,几乎与标准的Tab Bar Controller一模一样。(它几乎是一个标签栏控制器,但有一个可隐藏的侧菜单,而不是标签栏。) 根据Apple文档中的说明,每当我向容器中添加子ViewControll

  • 问题内容: 最近,我遇到了原始类型包装器类(如和)中的常量。在API中,第一个定义为: 一个常数,保持double型的正无穷大。它等于Double.longBitsToDouble(0x7ff0000000000000L)返回的值。 其他人也有同样的定义。 我遇到的麻烦是了解这些常数实际上是 什么 。他们实际上并不能 成为 或 代表 正/负无穷大,因为系统本质上是有限的。Java创建者认为仅仅是对