2014-01-23 4 views
1

Я пытаюсь создать свое первое приложение для Android, и я уже застрял. У меня есть два переключателя, и когда они включаются, появляется диалоговое окно. Я бы хотел, чтобы кнопка «Отмена» выключила переключатель. Я попытался toggleButton.setChecked (false), Switch.setChecked (false) и т. Д., Но поскольку эти ключи были созданы в XML-файле, нет никакого объекта для выполнения этого метода в/с. Как мне переключиться на эти переключатели в моей программе? У меня есть мой слушатель onClick в моем основном действии и создание диалога как другой класс. Это может быть неправильно, но это работает до этого момента.Переключить переключатель на основе выбора кнопки диалога в приложении Android

MainActivity.java:

package com.example.arduinoautomation; 

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

public class MainActivity extends Activity { 


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


    public void lampToggle(View view) { 
     // Is the toggle on? 
     boolean on = ((Switch) view).isChecked(); 

     if (on) { 
      lampOnDialog lamp_on = new lampOnDialog(); 
      lamp_on.message = "Lamp is on."; 
      lamp_on.show(this.getFragmentManager(),"switch"); 
     } else { 
      // Disable vibrate 
     } 
    } 

    public void lightToggle(View view) { 
     // Is the toggle on? 
     boolean on = ((Switch) view).isChecked(); 

     if (on) { 
      lampOnDialog light_on = new lampOnDialog(); 
      light_on.message = "Light is on"; 
      light_on.show(this.getFragmentManager(), "switch"); 
     } else { 
      // Disable vibrate 
     } 
    } 


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

} 

lampOnDialog.java:

package com.example.arduinoautomation; 

import android.app.AlertDialog; 
import android.app.Dialog; 
import android.app.DialogFragment; 
import android.content.DialogInterface; 
import android.os.Bundle; 

public class lampOnDialog extends DialogFragment { 
    String message = ""; 
    @Override 
    public Dialog onCreateDialog(Bundle savedInstanceState) { 

     // Use the Builder class for convenient dialog construction 
     AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); 
     builder.setMessage(message) 
       .setPositiveButton("OK", new DialogInterface.OnClickListener() { 
        public void onClick(DialogInterface dialog, int id) { 
         // FIRE ZE MISSILES! 
        } 
       }) 
       .setNegativeButton("Cancel", new DialogInterface.OnClickListener() { 
        public void onClick(DialogInterface dialog, int id) { 
         // User cancelled the dialog 

        } 
       }); 
     // Create the AlertDialog object and return it 
     return builder.create(); 
    } 
} 

activity_main.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" > 

    <Switch 
     android:id="@+id/switch1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentLeft="true" 
     android:layout_alignParentTop="true" 
     android:layout_marginTop="57dp" 
     android:onClick="lampToggle" 
     android:text="Lamp" /> 

    <Switch 
     android:id="@+id/switch2" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_alignParentLeft="true" 
     android:layout_below="@+id/switch1" 
     android:layout_marginTop="49dp" 
     android:onClick="lightToggle" 
     android:text="Lights" /> 

</RelativeLayout> 

ответ

1

Вы должны определить свой ToggleButton как View в своей деятельности:

ToggleButton toggle; 

А затем создать его экземпляр, как правило, в вашем OnCreate метод:

toggle = (ToggleButton) findViewById(R.id.switch1); 

Затем вы можете использовать setChecked метод на ваш взгляд, где бы:

toggle.setChecked(false); 

EDIT

Вы не можете получить доступ к представлению, потому что ваше диалоговое окно - это еще один класс, а вид переключения - в вашем классе Activity. Попробуйте создать диалог внутри класса активность:

public void showDialog(String message) { 
    AlertDialog.Builder builder = new AlertDialog.Builder(this); 
    builder.setMessage(message).setPositiveButton("Yes, you will", new DialogInterface.OnClickListener() { 
     @Override 
     public void onClick(DialogInterface dialog, int which) { 
      toggle.setChecked(true); 
     } 
    }).setNegativeButton("No, you won't", new DialogInterface.OnClickListener() { 

     @Override 
     public void onClick(DialogInterface dialog, int which) { 
      toggle.setChecked(false); 
     } 
    }).show(); 
} 

, а затем показать диалоговое окно, в любом месте вашей деятельности, позвонив showDialog() метод:

showDialog("Hi, I'll be your dialog today"); 
+0

Я был в состоянии сделать первые две строки не проблема, но когда я пытаюсь установить его в false в методе onClick кнопки «Отмена» в AlertDialog, он говорит мне, что переменная «переключение» не существует. –

+0

См. Мой обновленный ответ. Я не уверен, что это оптимальное решение, но оно должно работать. Весь код в ответе должен находиться в одной и той же Деятельности, поэтому вы можете отменить свой класс LampOnDialog. – Plasma

Смежные вопросы