2016-09-22 8 views
0

So bin ich ziemlich neu in der Android-Entwicklung und lief schnell in ein Problem, ich habe eine Ansicht, wo ich sowohl das Bluetooth und WLAN des Geräts aktivieren/deaktivieren möchten, obwohl beide über kontrolliert ein separater Schalter.Android Wie man mehrere Schalter behandelt

Also hier ist es, was meiner Meinung nach ist wie:

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
android:id="@+id/activity_connect" 
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="nl.neverdull.payleven.safeport.Connect"> 

<Switch 
    android:text="Bluetooth" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_alignParentTop="true" 
    android:id="@+id/bluetooth_switch" 
    android:layout_alignParentLeft="true" 
    android:layout_alignParentStart="true" 
    android:layout_alignParentRight="true" 
    android:layout_alignParentEnd="true" 
    tools:text="bluetooth" 
    android:contentDescription="Status of bluetooth" 
    android:textOn="@string/bluetooth_on" 
    android:textOff="@string/bluetooth_off" /> 

<Switch 
    android:text="Wifi" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:layout_alignParentLeft="true" 
    android:layout_alignParentStart="true" 
    android:layout_marginTop="25dp" 
    android:id="@+id/wifi_switch" 
    android:layout_alignParentRight="true" 
    android:layout_alignParentEnd="true" 
    tools:text="wifi" /> 
</RelativeLayout> 

Jetzt habe ich es schon für die Bluetooth arbeiten, was ich als

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

    blueToothStatus(); 
    wifiStatus(); 
} 

public void blueToothStatus() { 
    Switch s = (Switch) findViewById(R.id.bluetooth_switch); 


    if (s != null) { 
     s.setOnCheckedChangeListener(this); 
    } 
} 

public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { 
    BluetoothAdapter mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter(); 
    mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter(); 

    Toast.makeText(this, "Bluetooth " + (isChecked ? "enabled" : "disabled"), 
      Toast.LENGTH_SHORT).show(); 
    if(isChecked) { 
     mBluetoothAdapter.enable(); 
    } else { 
     mBluetoothAdapter.disable(); 

    } 
} 

Jetzt folgen, wenn ich versuche, das gleiche zu tun für das wifi wird es natürlich am Ende mit der gleichen onCheckedChanged Funktion, also was meine ideale Lösung wäre es, wie man das Wifi verwenden eigene onCheckedChanged Funktion hat?

Ab sofort habe ich im Grunde den gleichen Code für das WIFI und Bluetooth, aber es wird nicht funktionieren, da beide am Ende auf die gleiche Funktion gehen, die meinen WLAN-Schalter ändert den Bluetooth-Status.

public void wifiStatus() { 
    Switch s = (Switch) findViewById(R.id.wifi_switch); 

    s.setOnCheckedChangeListener(this);//This goes to my onCheckedChanged 
} 
+0

Sie können zum Beispiel die onCheckedChanged Zuhörer als eine anonyme Klasse definieren, anstatt vorbei „this“ – kingston

+0

Eine andere Option shoul die ID des buttonView sein prüfen Sie zuerst, wie if (buttonView.getId() == bluetoothSwitchID) sonst –

Antwort

1
public void wifiStatus() { 
     Switch s = (Switch) findViewById(R.id.wifi_switch); 

     s.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { 
      @Override 
      public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { 
       // do what you need to do 
      } 
     }); 
    } 
+1

Das ist genau das, was ich suchte, auch meiner Meinung nach möglicherweise die sauberste Art, den Code lesbar zu halten, anstatt mit Switch-Anweisungen zu enden! Vielen Dank! – killstreet

Verwandte Themen