Anschlussfrage zu Werte von Klasse an Klasse übergeben, wie machen wenn sich ein Wert ständig ändert?

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Anschlussfrage zu Werte von Klasse an Klasse übergeben, wie machen wenn sich ein Wert ständig ändert?

    Hab hier meinen Code, einmal die Main Activity und das andere Mal meine View Klasse. Ich übergebe den Wert "counter" vom View an meine Activity, dies kein Problem. "count" ändert sich ständig im View, in meiner Main Activity wird aber nur der Anfangswert den "count" bei der ersten Übergabe hatte übernommen, in diesem Falle 1. Meine Frage ist nun warum es diesen Wert nicht aktualisiert, denn nach jeder Touch-Berührung wird count um 1 grösser, also sollte auch der übergebene Wert um 1 grösser werden..

    MainActivity:

    Java-Quellcode

    1. package com.example.drawproject;
    2. import android.support.v7.app.ActionBarActivity;
    3. import android.support.v7.app.ActionBar;
    4. import android.support.v4.app.Fragment;
    5. import android.app.Activity;
    6. import android.content.Intent;
    7. import android.os.Bundle;
    8. import android.view.LayoutInflater;
    9. import android.view.Menu;
    10. import android.view.MenuItem;
    11. import android.view.View;
    12. import android.view.ViewGroup;
    13. import android.widget.Button;
    14. import android.os.Build;
    15. public class MainActivity extends Activity {
    16. Button b1; //Gelb
    17. Button b2; //Blau
    18. Button b3; //Grün
    19. Integer Pcount2 = DrawArea.getCountValue(); //get the count value
    20. @Override
    21. public void onCreate(Bundle savedInstanceState) {
    22. super.onCreate(savedInstanceState);
    23. setContentView(R.layout.drawlayout);
    24. DrawArea da = new DrawArea(this, null);
    25. if(Pcount2 % 2 ==0){ //use it -> it's always the same number, instead of the increased
    26. Intent nextScreen = new Intent(this, ChangeArea.class);
    27. startActivity(nextScreen);
    28. }
    29. else{
    30. Pcount2++;
    31. }
    32. }
    33. }
    Alles anzeigen


    View Klasse

    Java-Quellcode

    1. package com.example.drawproject;
    2. import android.content.Context;
    3. import android.graphics.*;
    4. import android.os.Bundle;
    5. import android.util.AttributeSet;
    6. import android.util.SparseArray;
    7. import android.view.MotionEvent;
    8. import android.view.View;
    9. import java.util.ArrayList;
    10. import java.util.List;
    11. import java.util.Random;
    12. public class DrawArea extends View {
    13. private List<Stroke> _allStrokes; //all strokes that need to be drawn
    14. private SparseArray<Stroke> _activeStrokes; //use to retrieve the currently drawn strokes
    15. private Random _rdmColor = new Random();
    16. static int count = 1; // count ist 1
    17. public DrawArea(Context context, AttributeSet attrs) {
    18. super(context, attrs);
    19. _allStrokes = new ArrayList<Stroke>();
    20. _activeStrokes = new SparseArray<Stroke>();
    21. setFocusable(true);
    22. setFocusableInTouchMode(true);
    23. }
    24. public void onDraw(Canvas canvas) {
    25. if (_allStrokes != null) {
    26. for (Stroke stroke: _allStrokes) {
    27. if (stroke != null) {
    28. Path path = stroke.getPath();
    29. Paint painter = stroke.getPaint();
    30. if ((path != null) && (painter != null)) {
    31. if(count%2 != 0){
    32. canvas.drawPath(path, painter);
    33. }
    34. }
    35. }
    36. }
    37. }
    38. }
    39. @Override
    40. public boolean onTouchEvent(MotionEvent event) {
    41. final int action = event.getActionMasked();
    42. final int pointerCount = event.getPointerCount();
    43. switch (action) {
    44. case MotionEvent.ACTION_DOWN: {
    45. count++; // count wird um 1 erhöht
    46. if(count%2 != 1)
    47. {pointDown((int)event.getX(), (int)event.getY(), event.getPointerId(0));
    48. break;
    49. }
    50. if (count%2 != 0){
    51. for (int pc = 0; pc < pointerCount; pc++) {
    52. pointDown((int)event.getX(pc), (int)event.getY(pc), event.getPointerId(pc));
    53. }
    54. }
    55. }
    56. case MotionEvent.ACTION_MOVE: {
    57. break;
    58. }
    59. case MotionEvent.ACTION_UP: {
    60. break;
    61. }
    62. }
    63. invalidate();
    64. return true;
    65. }
    66. public static int getCountValue(){
    67. int count2 = count; //count wird zur übergabe vorbereitet...
    68. return count2;
    69. }
    70. private void pointDown(int x, int y, int id) {
    71. Integer value = ChangeArea.getColorValue();
    72. if(count%2 !=1){
    73. //create a paint with random color
    74. Paint paint = new Paint();
    75. paint.setStyle(Paint.Style.STROKE);
    76. if (value == 1){
    77. paint.setStrokeWidth(15);
    78. }else
    79. if (value == 2){
    80. paint.setStrokeWidth(20);
    81. }else
    82. if (value == 3){
    83. paint.setStrokeWidth(5);
    84. }
    85. else{
    86. paint.setStrokeWidth(10);
    87. }
    88. if (value == 1){
    89. paint.setColor(Color.YELLOW);
    90. }else
    91. if (value == 2){
    92. paint.setColor(Color.BLUE);
    93. }else
    94. if (value == 3){
    95. paint.setColor(Color.GREEN);
    96. }
    97. else{
    98. paint.setColor(_rdmColor.nextInt()); //Here should the values be added!
    99. }
    100. //create the Stroke
    101. Point pt = new Point(x, y);
    102. Stroke stroke = new Stroke(paint);
    103. stroke.addPoint(pt);
    104. _activeStrokes.put(id, stroke);
    105. _allStrokes.add(stroke);
    106. }
    107. if (count%2 != 0){
    108. //retrieve the stroke and add new point to its path
    109. Stroke stroke = _activeStrokes.get(id);
    110. if (stroke != null) {
    111. Point pt = new Point(x, y);
    112. stroke.addPoint(pt);
    113. }
    114. }
    115. }
    116. }
    Alles anzeigen
  • Wie oft rufst du denn die Methode, um an den Wert zu kommen, den auf? Nur einmal oder? Also warum sollte sich der Wert in der Activity auch ändern. Abgesehen davon würd ich sowieso public static Variablen vermeiden. Es sei denn sie sind final.

    Ich verstehe jedoch nicht, was du damit eigentlich machen willst. Die onCreate wird doch jeweils nur einmal am Anfang aufgerufen. Die würde eh nicht die Änderung des Wertes mehr mitbekommen.

    block_
    Kollaboratives Malen im WLAN? DrawTogether!
    Vorschläge, Verbesserungen ect. gern gesehen :)