Goeiemiddag,
Ik ben bezig met een Android app die op dit moment 2 views heeft. een view met 3 tekstvelden waarin RGB waarden gezet kunnen worden en een view die zijn achtergrondkleur veranderd naar de waarden uit de tekstvelden. Verder is er een ColorModel class waarin de waarden worden opgeslagen. Deze class erft van Observable. De views implementeren Observer.
mijn view met tekstvelden:
[code=java]
public class RGBTextView extends LinearLayout implements Observer {
ColorModel model;
EditText rood;
EditText groen;
EditText blauw;
public RGBTextView(Context context, AttributeSet attrs) {
super(context, attrs);
init();
}
public void setModel(ColorModel model)
{
this.model = model;
}
public void init()
{
LayoutInflater inflater = (LayoutInflater)
getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
inflater.inflate(R.layout.textfield, this);
rood = (EditText) findViewById(R.id.roodText);
groen = (EditText) findViewById(R.id.groenText);
blauw = (EditText) findViewById(R.id.blauwText);
TextFieldListener listener = new TextFieldListener();
rood.setOnFocusChangeListener(listener);
groen.setOnFocusChangeListener(listener);
blauw.setOnFocusChangeListener(listener);
rood.setText("0");
groen.setText("0");
blauw.setText("0");
}
@Override
public void update(Observable observable, Object data) {
// TODO Auto-generated method stub
rood.setText(""+model.getRood());
groen.setText(""+model.getGroen());
blauw.setText(""+model.getBlauw());
}
public class TextFieldListener implements View.OnFocusChangeListener
{
@Override
public void onFocusChange(View arg0, boolean arg1) {
// TODO Auto-generated method stub
model.setRood(Integer.parseInt(rood.getText().toString()));
model.setGroen(Integer.parseInt(groen.getText().toString()));
model.setBlauw(Integer.parseInt(blauw.getText().toString()));
}
}
}
[/code=java]
En mijn model:
[code=java]
public class ColorModel extends Observable {
private int rood, groen, blauw;
public int getRood() {
return rood;
}
public void setRood(int rood) {
this.rood = rood;
setChanged();
notifyObservers();
}
public int getGroen() {
return groen;
}
public void setGroen(int groen) {
this.groen = groen;
setChanged();
notifyObservers();
}
public int getBlauw() {
return blauw;
}
public void setBlauw(int blauw) {
this.blauw = blauw;
setChanged();
notifyObservers();
}
}
[/code=java]
Nu is het probleem dat wanneer een tekstveld zijn focus verliest en dus de listener wordt aangeroepen alleen het tekstveld dat als eerst in de listener staat werkt. Bijvoorbeeld:
Ik voer in het eerste tekstveld (rood) 255 in. Daarna wissel ik van tekstveld. Achtergrond wordt rood.
Ik voer in het tweede tekstveld (groen) 255 in. Daarna wissel ik van tekstveld. Tekst in tekstveld springt terug op 0. Achtergrond blijft rood.
Als ik dan de listener aanpas naar:
[code=java]
public class TextFieldListener implements View.OnFocusChangeListener
{
@Override
public void onFocusChange(View arg0, boolean arg1) {
// TODO Auto-generated method stub
//model.setRood(Integer.parseInt(rood.getText().toString()));
model.setGroen(Integer.parseInt(groen.getText().toString()));
model.setBlauw(Integer.parseInt(blauw.getText().toString()));
}
}
[/code=java]
Nu werkt rood natuurlijk niet meer, groen wel, blauw niet. Ik heb echt geen idee hoe dit komt en hoop dat jullie kunnen helpen.
Ik ben bezig met een Android app die op dit moment 2 views heeft. een view met 3 tekstvelden waarin RGB waarden gezet kunnen worden en een view die zijn achtergrondkleur veranderd naar de waarden uit de tekstvelden. Verder is er een ColorModel class waarin de waarden worden opgeslagen. Deze class erft van Observable. De views implementeren Observer.
mijn view met tekstvelden:
[code=java]
public class RGBTextView extends LinearLayout implements Observer {
ColorModel model;
EditText rood;
EditText groen;
EditText blauw;
public RGBTextView(Context context, AttributeSet attrs) {
super(context, attrs);
init();
}
public void setModel(ColorModel model)
{
this.model = model;
}
public void init()
{
LayoutInflater inflater = (LayoutInflater)
getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
inflater.inflate(R.layout.textfield, this);
rood = (EditText) findViewById(R.id.roodText);
groen = (EditText) findViewById(R.id.groenText);
blauw = (EditText) findViewById(R.id.blauwText);
TextFieldListener listener = new TextFieldListener();
rood.setOnFocusChangeListener(listener);
groen.setOnFocusChangeListener(listener);
blauw.setOnFocusChangeListener(listener);
rood.setText("0");
groen.setText("0");
blauw.setText("0");
}
@Override
public void update(Observable observable, Object data) {
// TODO Auto-generated method stub
rood.setText(""+model.getRood());
groen.setText(""+model.getGroen());
blauw.setText(""+model.getBlauw());
}
public class TextFieldListener implements View.OnFocusChangeListener
{
@Override
public void onFocusChange(View arg0, boolean arg1) {
// TODO Auto-generated method stub
model.setRood(Integer.parseInt(rood.getText().toString()));
model.setGroen(Integer.parseInt(groen.getText().toString()));
model.setBlauw(Integer.parseInt(blauw.getText().toString()));
}
}
}
[/code=java]
En mijn model:
[code=java]
public class ColorModel extends Observable {
private int rood, groen, blauw;
public int getRood() {
return rood;
}
public void setRood(int rood) {
this.rood = rood;
setChanged();
notifyObservers();
}
public int getGroen() {
return groen;
}
public void setGroen(int groen) {
this.groen = groen;
setChanged();
notifyObservers();
}
public int getBlauw() {
return blauw;
}
public void setBlauw(int blauw) {
this.blauw = blauw;
setChanged();
notifyObservers();
}
}
[/code=java]
Nu is het probleem dat wanneer een tekstveld zijn focus verliest en dus de listener wordt aangeroepen alleen het tekstveld dat als eerst in de listener staat werkt. Bijvoorbeeld:
Ik voer in het eerste tekstveld (rood) 255 in. Daarna wissel ik van tekstveld. Achtergrond wordt rood.
Ik voer in het tweede tekstveld (groen) 255 in. Daarna wissel ik van tekstveld. Tekst in tekstveld springt terug op 0. Achtergrond blijft rood.
Als ik dan de listener aanpas naar:
[code=java]
public class TextFieldListener implements View.OnFocusChangeListener
{
@Override
public void onFocusChange(View arg0, boolean arg1) {
// TODO Auto-generated method stub
//model.setRood(Integer.parseInt(rood.getText().toString()));
model.setGroen(Integer.parseInt(groen.getText().toString()));
model.setBlauw(Integer.parseInt(blauw.getText().toString()));
}
}
[/code=java]
Nu werkt rood natuurlijk niet meer, groen wel, blauw niet. Ik heb echt geen idee hoe dit komt en hoop dat jullie kunnen helpen.