使用 Switch 显示输出
Using Switch to display output
我正在将我的项目从按钮升级到开关代码。但是,它构建良好,但当我进入 Main 时它崩溃了。
所以基本上我有 4 个按钮和 4 种颜色。我在 .xml 中为每个 "On" 和 "Off" 状态设置了文本。然后我转到 Main 并使用条件语句检查每个开关的状态。例如,如果红色和蓝色亮起,输出 ("greeting") 将显示为:"Status is: Red Blue "(因为绿色和黄色是空白)
谁能发现错误?事件日志很干净,所以我不知道问题是什么。
package app.real_time_chat;
import android.graphics.Color;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.content.res.ResourcesCompat;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.Switch;
import android.widget.TextView;
import android.view.View.OnClickListener;
import com.google.firebase.database.ChildEventListener;
import com.google.firebase.database.DataSnapshot;
import com.google.firebase.database.DatabaseError;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
/**
* Created by David on 5/01/2017
*/
public class Chat_Room extends AppCompatActivity{
private Button btn_send_msg;
private Button button_msg;
private EditText input_msg;
private TextView chat_conversation;
Switch button_red, button_blue, button_green, button_yellow;
private String user_name,room_name;
private DatabaseReference root ;
private String temp_key;
private String greeting;
//for displaying button messages
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.chat_room);
// initiate view's
button_red = (Switch) findViewById(R.id.button_red);
button_blue = (Switch) findViewById(R.id.button_blue);
button_green = (Switch) findViewById(R.id.button_green);
button_yellow = (Switch) findViewById(R.id.button_yellow);
btn_send_msg = (Button) findViewById(R.id.btn_send);
//for original message sending program
btn_send_msg.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
String statusSwitch_Red, statusSwitch_Blue, statusSwitch_Green,
statusSwitch_Yellow;
if (button_red.isChecked())
statusSwitch_Red = button_red.getTextOn().toString();
else
statusSwitch_Red = button_red.getTextOff().toString();
if (button_blue.isChecked())
statusSwitch_Blue = button_blue.getTextOn().toString();
else
statusSwitch_Blue = button_blue.getTextOff().toString();
if (button_green.isChecked())
statusSwitch_Green = button_green.getTextOn().toString();
else
statusSwitch_Green = button_green.getTextOff().toString();
if (button_yellow.isChecked())
statusSwitch_Yellow = button_yellow.getTextOn().toString();
else
statusSwitch_Yellow = button_yellow.getTextOff().toString();
greeting = "Status is: " + statusSwitch_Red + "/n" +
statusSwitch_Blue + "/n" + statusSwitch_Green + "/n" + statusSwitch_Yellow;
// display the current state for switch's
}
});
input_msg = (EditText) findViewById(R.id.msg_input);
chat_conversation = (TextView) findViewById(R.id.textView);
user_name = getIntent().getExtras().get("user_name").toString();
//converts username to string to display to screen
room_name = getIntent().getExtras().get("room_name").toString();
//converts room name to string to display to screen
setTitle(" Room - "+room_name);
//displays pre-set room name to top of app page
root = FirebaseDatabase.getInstance().getReference().child(room_name);
btn_send_msg.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View arg0) {
Map<String,Object> map = new HashMap<String, Object>();
temp_key = root.push().getKey();
root.updateChildren(map);
DatabaseReference message_root = root.child(temp_key);
Map<String,Object> map2 = new HashMap<String, Object>();
map2.put("name",user_name);
map2.put("msg",greeting);
// map2.put("msg",input_msg.getText().toString());
for original message sending program
message_root.updateChildren(map2);
}
});
root.addChildEventListener(new ChildEventListener() {
@Override
public void onChildAdded(DataSnapshot dataSnapshot, String s) {
append_chat_conversation(dataSnapshot);
}
@Override
public void onChildChanged(DataSnapshot dataSnapshot, String s) {
append_chat_conversation(dataSnapshot);
}
@Override
public void onChildRemoved(DataSnapshot dataSnapshot) {
}
@Override
public void onChildMoved(DataSnapshot dataSnapshot, String s) {
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
}
private String chat_msg,chat_user_name;
private void append_chat_conversation(DataSnapshot dataSnapshot) {
Iterator i = dataSnapshot.getChildren().iterator();
while (i.hasNext()){
chat_msg = (String) ((DataSnapshot)i.next()).getValue();
chat_user_name = (String) ((DataSnapshot)i.next()).getValue();
chat_conversation.append(chat_user_name +" : "+chat_msg +" \n");
}
}
}
这是 .xml 文件
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:background="@color/pale_blue"
android:layout_height="match_parent"
android:id="@+id/linearlayout">
<ImageView
android:layout_width="382dp"
android:layout_height="62dp"
android:layout_marginLeft="8dp"
android:layout_marginRight="8dp"
android:src="@drawable/alumis_logo"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
tools:layout_editor_absoluteY="-4dp"
app:layout_constraintHorizontal_bias="0.454"
android:id="@+id/imageView"
/>
<Switch
android:id="@+id/button_red"
android:layout_width="99dp"
android:layout_height="30dp"
app:layout_constraintBottom_toTopOf="@+id/button_blue"
app:layout_constraintTop_toTopOf="parent"
android:text=" Red"
android:background="#ff0000"
android:layout_marginTop="60dp"
android:layout_marginBottom="1dp"
android:layout_marginRight="8dp"
app:layout_constraintVertical_bias="0.484"
app:layout_constraintRight_toRightOf="parent"
android:textOn="赤色"
android:textOff=" " />
<Switch
android:id="@+id/button_blue"
android:layout_width="99dp"
android:layout_height="30dp"
app:layout_constraintBottom_toTopOf="@+id/button_green"
app:layout_constraintTop_toBottomOf="@+id/button_red"
android:text=" Blue"
android:background="#0000ff"
android:layout_marginBottom="1dp"
android:layout_marginRight="8dp"
app:layout_constraintRight_toRightOf="parent"
android:layout_marginTop="1dp"
tools:layout_editor_absoluteX="279dp"
android:textOn="青色"
android:textOff=" " />
<Switch
android:id="@+id/button_green"
android:layout_width="99dp"
android:layout_height="30dp"
app:layout_constraintBottom_toTopOf="@+id/button_yellow"
app:layout_constraintTop_toBottomOf="@+id/button_blue"
android:text=" Green"
android:background="#00ff00"
android:layout_marginBottom="1dp"
android:layout_marginTop="1dp"
android:layout_marginRight="8dp"
app:layout_constraintRight_toRightOf="parent"
android:textOn="緑色"
android:textOff=" " />
<Switch
android:id="@+id/button_yellow"
android:layout_width="99dp"
android:layout_height="30dp"
app:layout_constraintTop_toBottomOf="@+id/button_green"
app:layout_constraintBottom_toBottomOf="parent"
android:text=" Yellow"
android:background="#ffff00"
android:layout_marginBottom="40dp"
android:layout_marginRight="8dp"
app:layout_constraintRight_toRightOf="parent"
android:layout_marginTop="1dp"
android:textOn="黄色"
android:textOff=" " />
<Button
android:layout_width="129dp"
android:layout_height="48dp"
android:text="Send"
android:id="@+id/btn_send"
tools:layout_constraintTop_creator="1"
tools:layout_constraintLeft_creator="1"
app:layout_constraintTop_toTopOf="@+id/msg_input"
app:layout_constraintLeft_toRightOf="@+id/msg_input"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintHorizontal_bias="0.0"
android:layout_marginTop="57dp" />
<EditText
android:layout_width="275dp"
android:layout_height="50dp"
android:id="@+id/msg_input"
tools:layout_constraintBottom_creator="1"
app:layout_constraintBottom_toBottomOf="parent"
android:layout_marginBottom="1dp"
tools:layout_editor_absoluteX="0dp"
tools:layout_editor_absoluteY="460dp" />
<ScrollView
android:id="@+id/scrollView"
android:layout_width="269dp"
android:layout_height="0dp"
android:layout_marginBottom="4dp"
android:layout_marginLeft="16dp"
android:layout_marginTop="68dp"
app:layout_constraintBottom_toTopOf="@+id/msg_input"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.0"
tools:layout_constraintLeft_creator="1"
tools:layout_constraintTop_creator="1">
<TextView
android:id="@+id/textView"
android:layout_width="394dp"
android:layout_height="wrap_content"
android:layout_gravity="bottom"
android:scrollbars="vertical"
android:textAppearance="?android:attr/textAppearanceLarge"
tools:layout_editor_absoluteX="8dp"
tools:layout_editor_absoluteY="49dp" />
</ScrollView>
</android.support.constraint.ConstraintLayout>
谢谢,任何帮助将不胜感激!!
首先尝试删除第 56 行的 ;
。此外,您似乎没有初始化正确的对象。您将 OnClickListener
设置为 "btn_send_msg" 但有 none。
您需要提供您的按钮之一
android:id="@+id/btn_send_msg"
然后在设置 onClickListener
之前初始化它。 IE。取消注释:
btn_send_msg = (Button) findViewById(R.id.btn_send);
放在前面:
btn_send_msg.setOnClickListener(new View.OnClickListener() {...}
更新 - 将开关用作按钮
首先,初始化你的交换机,即:
my_switch = (Switch) findViewById(R.id.my_switch);
然后设置其OnClickListener
:
my_switch.setOnClickListener(new View.OnClickListener(){...}
诀窍是您需要知道开关是否为 on/off,以防需要以不同方式处理。所以在你的 OnClickListener
方法中,做类似的事情:
boolean mSwitch = ((Switch) view).isChecked();
if(mSwitch){
//the switch is "on"
//do something
}
else {
//the switch is "off"
// do something else
}
我正在将我的项目从按钮升级到开关代码。但是,它构建良好,但当我进入 Main 时它崩溃了。
所以基本上我有 4 个按钮和 4 种颜色。我在 .xml 中为每个 "On" 和 "Off" 状态设置了文本。然后我转到 Main 并使用条件语句检查每个开关的状态。例如,如果红色和蓝色亮起,输出 ("greeting") 将显示为:"Status is: Red Blue "(因为绿色和黄色是空白)
谁能发现错误?事件日志很干净,所以我不知道问题是什么。
package app.real_time_chat;
import android.graphics.Color;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.content.res.ResourcesCompat;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.Switch;
import android.widget.TextView;
import android.view.View.OnClickListener;
import com.google.firebase.database.ChildEventListener;
import com.google.firebase.database.DataSnapshot;
import com.google.firebase.database.DatabaseError;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
/**
* Created by David on 5/01/2017
*/
public class Chat_Room extends AppCompatActivity{
private Button btn_send_msg;
private Button button_msg;
private EditText input_msg;
private TextView chat_conversation;
Switch button_red, button_blue, button_green, button_yellow;
private String user_name,room_name;
private DatabaseReference root ;
private String temp_key;
private String greeting;
//for displaying button messages
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.chat_room);
// initiate view's
button_red = (Switch) findViewById(R.id.button_red);
button_blue = (Switch) findViewById(R.id.button_blue);
button_green = (Switch) findViewById(R.id.button_green);
button_yellow = (Switch) findViewById(R.id.button_yellow);
btn_send_msg = (Button) findViewById(R.id.btn_send);
//for original message sending program
btn_send_msg.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
String statusSwitch_Red, statusSwitch_Blue, statusSwitch_Green,
statusSwitch_Yellow;
if (button_red.isChecked())
statusSwitch_Red = button_red.getTextOn().toString();
else
statusSwitch_Red = button_red.getTextOff().toString();
if (button_blue.isChecked())
statusSwitch_Blue = button_blue.getTextOn().toString();
else
statusSwitch_Blue = button_blue.getTextOff().toString();
if (button_green.isChecked())
statusSwitch_Green = button_green.getTextOn().toString();
else
statusSwitch_Green = button_green.getTextOff().toString();
if (button_yellow.isChecked())
statusSwitch_Yellow = button_yellow.getTextOn().toString();
else
statusSwitch_Yellow = button_yellow.getTextOff().toString();
greeting = "Status is: " + statusSwitch_Red + "/n" +
statusSwitch_Blue + "/n" + statusSwitch_Green + "/n" + statusSwitch_Yellow;
// display the current state for switch's
}
});
input_msg = (EditText) findViewById(R.id.msg_input);
chat_conversation = (TextView) findViewById(R.id.textView);
user_name = getIntent().getExtras().get("user_name").toString();
//converts username to string to display to screen
room_name = getIntent().getExtras().get("room_name").toString();
//converts room name to string to display to screen
setTitle(" Room - "+room_name);
//displays pre-set room name to top of app page
root = FirebaseDatabase.getInstance().getReference().child(room_name);
btn_send_msg.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View arg0) {
Map<String,Object> map = new HashMap<String, Object>();
temp_key = root.push().getKey();
root.updateChildren(map);
DatabaseReference message_root = root.child(temp_key);
Map<String,Object> map2 = new HashMap<String, Object>();
map2.put("name",user_name);
map2.put("msg",greeting);
// map2.put("msg",input_msg.getText().toString());
for original message sending program
message_root.updateChildren(map2);
}
});
root.addChildEventListener(new ChildEventListener() {
@Override
public void onChildAdded(DataSnapshot dataSnapshot, String s) {
append_chat_conversation(dataSnapshot);
}
@Override
public void onChildChanged(DataSnapshot dataSnapshot, String s) {
append_chat_conversation(dataSnapshot);
}
@Override
public void onChildRemoved(DataSnapshot dataSnapshot) {
}
@Override
public void onChildMoved(DataSnapshot dataSnapshot, String s) {
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
}
private String chat_msg,chat_user_name;
private void append_chat_conversation(DataSnapshot dataSnapshot) {
Iterator i = dataSnapshot.getChildren().iterator();
while (i.hasNext()){
chat_msg = (String) ((DataSnapshot)i.next()).getValue();
chat_user_name = (String) ((DataSnapshot)i.next()).getValue();
chat_conversation.append(chat_user_name +" : "+chat_msg +" \n");
}
}
}
这是 .xml 文件
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:background="@color/pale_blue"
android:layout_height="match_parent"
android:id="@+id/linearlayout">
<ImageView
android:layout_width="382dp"
android:layout_height="62dp"
android:layout_marginLeft="8dp"
android:layout_marginRight="8dp"
android:src="@drawable/alumis_logo"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
tools:layout_editor_absoluteY="-4dp"
app:layout_constraintHorizontal_bias="0.454"
android:id="@+id/imageView"
/>
<Switch
android:id="@+id/button_red"
android:layout_width="99dp"
android:layout_height="30dp"
app:layout_constraintBottom_toTopOf="@+id/button_blue"
app:layout_constraintTop_toTopOf="parent"
android:text=" Red"
android:background="#ff0000"
android:layout_marginTop="60dp"
android:layout_marginBottom="1dp"
android:layout_marginRight="8dp"
app:layout_constraintVertical_bias="0.484"
app:layout_constraintRight_toRightOf="parent"
android:textOn="赤色"
android:textOff=" " />
<Switch
android:id="@+id/button_blue"
android:layout_width="99dp"
android:layout_height="30dp"
app:layout_constraintBottom_toTopOf="@+id/button_green"
app:layout_constraintTop_toBottomOf="@+id/button_red"
android:text=" Blue"
android:background="#0000ff"
android:layout_marginBottom="1dp"
android:layout_marginRight="8dp"
app:layout_constraintRight_toRightOf="parent"
android:layout_marginTop="1dp"
tools:layout_editor_absoluteX="279dp"
android:textOn="青色"
android:textOff=" " />
<Switch
android:id="@+id/button_green"
android:layout_width="99dp"
android:layout_height="30dp"
app:layout_constraintBottom_toTopOf="@+id/button_yellow"
app:layout_constraintTop_toBottomOf="@+id/button_blue"
android:text=" Green"
android:background="#00ff00"
android:layout_marginBottom="1dp"
android:layout_marginTop="1dp"
android:layout_marginRight="8dp"
app:layout_constraintRight_toRightOf="parent"
android:textOn="緑色"
android:textOff=" " />
<Switch
android:id="@+id/button_yellow"
android:layout_width="99dp"
android:layout_height="30dp"
app:layout_constraintTop_toBottomOf="@+id/button_green"
app:layout_constraintBottom_toBottomOf="parent"
android:text=" Yellow"
android:background="#ffff00"
android:layout_marginBottom="40dp"
android:layout_marginRight="8dp"
app:layout_constraintRight_toRightOf="parent"
android:layout_marginTop="1dp"
android:textOn="黄色"
android:textOff=" " />
<Button
android:layout_width="129dp"
android:layout_height="48dp"
android:text="Send"
android:id="@+id/btn_send"
tools:layout_constraintTop_creator="1"
tools:layout_constraintLeft_creator="1"
app:layout_constraintTop_toTopOf="@+id/msg_input"
app:layout_constraintLeft_toRightOf="@+id/msg_input"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintHorizontal_bias="0.0"
android:layout_marginTop="57dp" />
<EditText
android:layout_width="275dp"
android:layout_height="50dp"
android:id="@+id/msg_input"
tools:layout_constraintBottom_creator="1"
app:layout_constraintBottom_toBottomOf="parent"
android:layout_marginBottom="1dp"
tools:layout_editor_absoluteX="0dp"
tools:layout_editor_absoluteY="460dp" />
<ScrollView
android:id="@+id/scrollView"
android:layout_width="269dp"
android:layout_height="0dp"
android:layout_marginBottom="4dp"
android:layout_marginLeft="16dp"
android:layout_marginTop="68dp"
app:layout_constraintBottom_toTopOf="@+id/msg_input"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.0"
tools:layout_constraintLeft_creator="1"
tools:layout_constraintTop_creator="1">
<TextView
android:id="@+id/textView"
android:layout_width="394dp"
android:layout_height="wrap_content"
android:layout_gravity="bottom"
android:scrollbars="vertical"
android:textAppearance="?android:attr/textAppearanceLarge"
tools:layout_editor_absoluteX="8dp"
tools:layout_editor_absoluteY="49dp" />
</ScrollView>
</android.support.constraint.ConstraintLayout>
谢谢,任何帮助将不胜感激!!
首先尝试删除第 56 行的 ;
。此外,您似乎没有初始化正确的对象。您将 OnClickListener
设置为 "btn_send_msg" 但有 none。
您需要提供您的按钮之一
android:id="@+id/btn_send_msg"
然后在设置 onClickListener
之前初始化它。 IE。取消注释:
btn_send_msg = (Button) findViewById(R.id.btn_send);
放在前面:
btn_send_msg.setOnClickListener(new View.OnClickListener() {...}
更新 - 将开关用作按钮
首先,初始化你的交换机,即:
my_switch = (Switch) findViewById(R.id.my_switch);
然后设置其OnClickListener
:
my_switch.setOnClickListener(new View.OnClickListener(){...}
诀窍是您需要知道开关是否为 on/off,以防需要以不同方式处理。所以在你的 OnClickListener
方法中,做类似的事情:
boolean mSwitch = ((Switch) view).isChecked();
if(mSwitch){
//the switch is "on"
//do something
}
else {
//the switch is "off"
// do something else
}