2017-08-18 47 views
0
public class MainActivity extends AppCompatActivity { 
@Override 
    protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
} 
} 

這是一個初學者的問題,但我似乎無法理解它,我也搜索並找不到相同的問題。活動中的理解方法

這裏是我的理解:

MainActivity正在擴大AppCompatActivity因此可以使用的字段和父類的方法。

protected void onCreate(Bundle savedInstanceState) {是父類中的方法,它被覆蓋。然後super關鍵字用於調用onCreate(..)方法。

現在我不明白的是setContentView(..)方法。我認爲在java中我們應該使用obj.methodsuper.methodClassName.method(如果是靜態的)來調用方法。但這裏的方法是單獨使用的。我只需要一個小的解釋或重定向到正確的地方。

謝謝。

+0

的聲明的setContentView也從AppCompatActivity或任何其父母的方法 –

回答

2

SetContentView是我們在繼承Activity類時繼承的一種方法,它從佈局資源中設置活動內容。資源將被誇大,將所有頂級視圖添加到活動中。活動使用setContentView(R.layout.main)將xml佈局設置爲將實際呈現爲活動UI的活動。

+0

是的,我明白這一點,但我們如何能叫它不使用'super'關鍵字? – kotlinhelp

+6

,因爲你可以在沒有任何超級參考的情況下調用父類方法 –

+1

當你想從父級調用方法時super是強制性的,在你的情況下,因爲你重寫了onCreate,你必須調用super.onCreate來調用父級方法,因爲你沒有覆蓋setContentView你不需要關鍵字 –

0

這是Android Developer

的onCreate(捆綁),在這裏你初始化你的活動。最重要的是,在這裏您通常會使用定義UI的佈局資源調用setContentView(int),並使用findViewById(int)來檢索該UI中需要以編程方式進行交互的小部件。

這是設置你的活動的主視圖 看看鏈接裏面有很多解釋。

+0

原始問題是關於java語法和範圍的更多內容。你不是在回答它。 –

1

在這種情況下,java隱式地假定對當前對象的引用。

setContentView(...) 

是相同

this.setContentView(...) 

this answer看看到類似的問題

0

爲了便於理解,讓我給你舉一個例子

public class BaseActivity extends AppCompatActivity{ 

//Two methods in super class 
    public void showProgress() { 
     //your code 
    } 

    public void hideProgress() { 

    //your code 
    } 

} 

這是BaseActivity這是其他活動超級類

public class MainActivity extends BaseActivity { 

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

     //Direct access to BaseClass Method 
     showProgress(); 
    } 

} 

正如你可以看到你可以直接訪問BaseClass的方法

如果仍然混淆讓我知道...

0

請檢查上面的例子; methodX是代碼中setContentView()方法的複本。 它們都是子類的方法。因此,沒有必要與super關鍵字

public class Base { 

    public void method_pub(){ 
     System.out.println("Method is public"); 

    } 
    protected void method_pro(){`enter code here 
     System.out.println("Method is protected"); 
    } 
} 

public class Que1 extends Base { 

    public void methodX(){} 

    @Override 
    protected void method_pro() { 

     super.method_pro(); 
     methodX(); 
    } 
}