2013-07-30 36 views
0

我是新來的android開發人員,我基本上試圖創建一個非常基本的應用程序,它將使用戶能夠切換其WiFi。Android開發將XML按鈕鏈接到Java

我的XML文件:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
android:paddingBottom="@dimen/activity_vertical_margin" 
android:paddingLeft="@dimen/activity_horizontal_margin" 
android:paddingRight="@dimen/activity_horizontal_margin" 
android:paddingTop="@dimen/activity_vertical_margin" 
tools:context=".MainActivity" > 

<TextView 
    android:id="@+id/textView1" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_alignParentTop="true" 
    android:layout_centerHorizontal="true" 
    android:layout_marginTop="16dp" 
    android:gravity="top" 
    android:text="@string/welcome" 
    android:textSize="25sp" /> 

<Button 
    android:id="@+id/wifi_on" 
    android:layout_width="150dp" 
    android:layout_height="60dp" 
    android:layout_below="@+id/textView1" 
    android:layout_centerHorizontal="true" 
    android:layout_marginTop="112dp" 
    android:text="@string/wifi_button" /> 

`

我的Java文件:

package com.example.dosomething;

import android.os.Bundle; import android.app.Activity; import android.view.Menu; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button;

public class MainActivity extends Activity implements OnClickListener {

protected Button wifi_on; 

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

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

@Override 
public void onClick(View v) { 
    // TODO Auto-generated method stub 


} 

public Button getWifiOn(){ 


    return wifi_on; 

} 


public void setWifiOn(Button on){ 

    wifi_on = on; 


} 

}`

我的問題是我怎麼可以參考該按鈕的XML文件中到java文件,以進一步告訴它,如果按鈕被點擊它應該打開wifi。謝謝。

回答

2

有幾種方法可以做到這一點。

  1. 你可以做的就是這一行的XML添加到您的<Button標籤

    android:onClick="setWifiOn"

那麼該函數的參數與此改變

public void getWifiOn(View v){ 


return wifi_on; 

} 

你不需要onClick或任何聽衆

如果你希望所有Buttons共享同樣的函數給他們喜歡

android:onClick="someFunction" 

然後在Java中所有的函數名2.You可以做同樣的事情做這樣的事情

public void someFunction(View v) 
{ 
    Button btn = (Button)v; 
    switch (v.getId()) 
    { 
     case (R.id.wifi_on: 
     setWifiOn(btn); 
     break; 
     case (R.id.differentBtnId): 
     // do some other things 
     break; 
    } 
} 

} 

3在許多情況下.LESS吸引力的,恕我直言

public class MainActivity extends Activity implements OnClickListener { 
    @Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    Button wifiBtn = (Button) findViewById(R.id.wifi_on); 
    wifiBtn.setOnClickListener(this); // your onClick below will be called then you will still have to check the id of the Button 
    // multiple buttons can set the same listener and use a switch like above 

} 

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

@Override 
public void onClick(View v) { 
    // TODO Auto-generated method stub 

} 

ñ OTE 3號是在你需要implements OnClickListener

Button Docs

我離開了另一條路,因爲我覺得只有一個它的最醜陋的,如果你有一個以上的Button