Ich versuche, eine App (meine erste), die den Wert von Binärzahlen in einer Dezimalanzeige zeigt. Ich entschied mich, eine ToggleButton
mit einem Bild von einer 1 oder 0 zu verwenden, die zeigt, ob es gedrückt wird oder nicht. Ich schaffte es, '1' bis zu einem TextView
zu verbinden, so dass, wenn die ToggleButton
gedrückt wird, es zeigt "Binary gleich: 1" darunter und ebenso für 0.Wie verwende ich 2 + ToggleButtons, um den Gesamtwert der Schaltflächen zu erhalten?
Ich dachte, das Hinzufügen einer zweiten Taste wäre einfach, aber nach 5 (10?) Stunden Googeln und Experimentieren Ich habe keine Ahnung wie das geht.
Ich habe case breaks versucht, aber wie ich schon seit zwei Wochen Programmierung (udacity Android Development for Beginners bisher) nur wurde ich habe keine Ahnung, wo man als nächste gehen oder wenn ich auf dem richtigen Weg-waren ToggleButtons
eine schlechte Idee, zum Beispiel?
Ich denke, was ich tun muss, ist dies:
1) Wenn toggle1
ausgewählt ist, machen valueOfOnes
= 1, sonst valueOfOnes
= 0
2) Wenn toggle2
(und schließlich 4, 8, 16 ...) wird machen ausgewählt valueOfTwos
= 2 sonst = 0
3) ein Verfahren machen, die valueOfOnes
-valueOfTwos
etc
4) zeigt, dass Mehrwert in Textview
Hoffnung Sie den Code unten schaut nicht zu chaotisch. Es ist aufgeräumter als mein Gehirn früher war ...
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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:orientation="vertical"
android:padding="16dp"
tools:context="com.example.android.binary02.MainActivity">
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="0dp"
android:layout_weight="3">
<ToggleButton
android:id="@+id/toggle2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:layout_margin="10dp"
android:layout_weight="1"
android:background="@drawable/check"
android:focusable="false"
android:focusableInTouchMode="false"
android:textOff=""
android:textOn="" />
<ToggleButton
android:id="@+id/toggle1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:layout_margin="10dp"
android:layout_weight="1"
android:background="@drawable/check"
android:focusable="false"
android:focusableInTouchMode="false"
android:textOff=""
android:textOn="" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:orientation="horizontal">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Binary equals: "
android:textSize="50sp" />
<TextView
android:id="@+id/decimal"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="0"
android:textSize="50sp" />
</LinearLayout>
</LinearLayout>
CHECK XML
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<!-- When selected, show one -->
<item android:drawable="@drawable/one"
android:state_checked="true" />
<!-- When not selected, show two-->
<item android:drawable="@drawable/zero"
android:state_checked="false"/>
</selector>
MainActivity.java:
package com.example.android.binary02;
import android.app.Activity;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.CompoundButton;
import android.widget.TextView;
import android.widget.ToggleButton;
public class MainActivity extends Activity
implements CompoundButton.OnCheckedChangeListener {
ToggleButton toggle1;
ToggleButton toggle2;
TextView decimalAnswer;
int valueOfOnes = 1;
int valueOfTwos = 2;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
toggle1 = (ToggleButton) findViewById(R.id.toggle1);
toggle1.setOnCheckedChangeListener(this);
toggle2 = (ToggleButton) findViewById(R.id.toggle2);
toggle2.setOnCheckedChangeListener(this);
decimalAnswer = (TextView) findViewById(R.id.decimal);
}
@Override
public void onCheckedChanged (CompoundButton compoundButton, boolean oneSelected) {
if(oneSelected) {
int valueOfOnes = 1;
addValues(valueOfOnes);
}
else
{
int valueOfOnes = 0;
addValues(valueOfOnes);
}
}
/** If this method is commented out and relevant changes made to addValues then one button works fine
*
* @param compoundButton
* @param oneSelected
*/
@Override
public void onCheckedChangedTwo (CompoundButton compoundButton, boolean twoSelected) {
if(twoSelected) {
int valueOfTwos = 2;
addValues(valueOfTwos);
}
else
{
int valueOfTwos = 0;
addValues(valueOfTwos);
}
}
/**
* Adds values together.
*
* If I delete the int valueOfTwos here and replace with +1 or +0 then the app works (but only for one button it looks like both buttons perform the same action)
*
*/
public void addValues(int valueOfOnes, int valueOfTwos) {
int totalValues;
totalValues = valueOfOnes + valueOfTwos;
displayDecimalAnswer(totalValues);
}
/**
* Displays decimal answer.
*/
public void displayDecimalAnswer(int answer) {
TextView decimalView = (TextView) findViewById(R.id.decimal);
decimalView.setText(String.valueOf(answer));
}
}
EDITED: Neben Saran Antwort unten versucht, würde dies zu übernehmen answer ein guter Weg zu folgen?
endgültige Antwort gefunden werden kann [hier] (http://stackoverflow.com/questions/38905750/converting-togglebutton-boolean-to-integer-values-then-add-together-in-a-textvie) – mmmartinnn