2017-04-20 84 views
-1

氏是我MainActivity.java如何使用意向構造

public class MainActivity extends AppCompatActivity { 

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

    Button bt=(Button) findViewById(R.id.bt); 
     bt.setOnClickListener(new View.OnClickListener() 
     { 
      @Override 
      public void onClick(View v) { 
       Intent i=new Intent(MainActivity.this,SecondAcitvity.class); 
       EditText et=(EditText) findViewById(R.id.et); 
       String text=et.getText().toString(); 
       i.putExtra("name",text); 
       startActivity(i); 
      } 
     }); 
    } 
} 

這是我SecondActivity.java

​​

WHE我使用

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

然後代碼運行良好

,但是當我使用

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

然後它給出錯誤。

無法解析構造

意向(匿名android.view.View.onClickListener,java.lang.Class中的{} com.example.intents.SecondActivity)`

爲什麼會這樣? 。

+0

this'指'OnClickListener',這不是一個'Context',這是'Intent'構造函數需要什麼什麼錯誤實際上你得到 –

+1

裏面的'OnClickListener','。 –

+0

,因爲你是在'View.OnClickListener'接口,所以如果你使用'this',這意味着你調用這個接口,而不是'MainActivity' –

回答

0

this關鍵字引用您目前在該類

Button bt=(Button) findViewById(R.id.bt); 
bt.setOnClickListener(new View.OnClickListener() 
{ 
     @Override 
     public void onClick(View v) { 
      Intent i=new Intent(this, SecondAcitvity.class); 
      EditText et = (EditText) findViewById(R.id.et); 
      String text = et.getText().toString(); 
      i.putExtra("name",text); 
      startActivity(i); 
    } 
}); 

你真引用View.OnClickListener();有啥寫上面的代碼時,你基本上做的是這樣說:

Intent i = new Intent(new View.OnClickListener(), SecondActivity.class); 

這個構造被稱爲內部類。當你在一個內部類中時(比如onClickListener實現),當你使用關鍵字this時,你需要特別指定外部類。

所以說MainActivity.this,你是明確要求爲目標的外部類(這是MainActivity)。

0

因爲你調用匿名類構造函數的意圖,這指的是當前實例。當你傳遞'MainActivity.this'時,這意味着你明確地說出要考慮的實例。我希望回答這個問題。

bt.setOnClickListener(new View.OnClickListener() 
    { 
     @Override 
     public void onClick(View v) { 
      Intent i=new Intent(MainActivity.this,SecondAcitvity.class); 
      EditText et=(EditText) findViewById(R.id.et); 
      String text=et.getText().toString(); 
      i.putExtra("name",text); 
      startActivity(i); 
     } 
    }); 
} 
0

bt.setOnClickListener它實際上是創建一個匿名內部類,它實現OnClickListener。如果你傳遞這個意圖時,它的匿名內部類的引用,這就是爲什麼你得到錯誤。你需要傳遞內部意圖內的活動引用。

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