什么是“MainActivity.this不包含类”错误实际上?

问题描述:

我在执行下面的代码时遇到问题。什么是“MainActivity.this不包含类”错误实际上?

其实我想用图片作为链接到另一个页面或活动。它是如何做

什么,实际上“MainActivity.this不封闭类”的问题? 下面是一个代码

我有2类,第一个是MainActivity

第二是MainActivity2

都是单MainAcitvity.java文件

MainActivity:

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

MainAc tivity2:

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

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

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

class ABC { 
    class XYZ extends Activity { 
    } 
} 

在上面的简单的例子,ABC包围类的XYZ

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

MainActivity2继承MainActivity,但没有Intent(...)声明封闭类。由于Intent()构造函数需要一个Context参数,并且您MainActivity2this例如,从Context(上下文 - >活动 - > MainActivity - > MainActivity2)继承,您可以只使用this作为参数:

所以不是:

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

使用:

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

我很欣赏你的答复非常感谢了点。 根据你的指导方针我组合了两个班级。 据我所知这个'封闭'的意思是将这些类作为1. 我是对的吗? –

+2

包围并不是告诉你结合课程或做任何不同的事情 - 这个词只是简单地描述了一个坐在另一个课堂内的课程。您得到的错误是因为您尝试访问MainActivity作为封闭类时,它不是。 – adelphus

+0

非常感谢你的努力。 –