Button Sichtbarkeiten oder Mitnahme von Variablen

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

  • Dafür musst du schon deine DB erweitern.
    Du hast ja schon einen custom adapter dort kannst fu selber bestimmen. Welche daden aus einem Datensatz angezeigt werden. Und welche nicht.

    Du wirst auch deine Klasse Eintrag erweitern müssen.

    Wieso willst du in der gezeigten Dialog Box was erweitern. Du musst nur den Datensatz erweitern.
    Also auch das neue erstellen löschen und Editoren eines Datensatzes. Natürlich auch das abfragen anzeigen.
    Da du iretgetwie mit php arbeitest wirst du das dort auch anpassen müssen. Du willst ja zusetzliche Infos in die DB speicgern.
    Und auch wider auslesen. Da du ja nur mit einer Liste arbeitest und beim Zürich die Daten neu unferandert aus der DB liest.

    Wenn du es nicht on der DB speichern willst dann überlege dir was anderes wo du die arraylist hältst. Um beim zurück auf die geänderte Liste zukommen.

    Da du nun schon eine DB hast würde ich immer das auch damit machen.

    Wie ist das ist deine DB lokal oder auf einen Server?
    Ein Feedback auf Tipps ist auch schön. :P
  • Ich habe mir eine Linux VM aufgesetzt wo meine Datenbank drauf ist. Darauf habe ich dann noch einen Webserver über Apache2 aufgesetzt und rufe darüber dann die Scrips auf. Mit PHP sowie der Datenbank komme ich gut klar da sind auch schon mehr Felder vorhanden und da bekomme ich wenn nötig auch Informationen aus der Firma. Das Problem ist dass ich, wie du wahrscheinlich schon bemerkt hast, in Android Studio kompletter Anfänger bin.
    Also ich möchte die Dialog Box erweite damit ich mehr Informationen weitergeben kann, dass Anpassen der PHP Skripte ist dann nur eine Kleinigkeit und ich habe mir viel von der App aus dem Internet kopiert da ich mit meinem Wissen nicht in der Lage bin das komplett selbst zu machen, daher brauche ich auch so viel Unterstützung.
  • Also ich habe mir jetzt eine zweite Liste erstellt mit anderen Buttons etc. Jetzt möchte ich noch möglich machen das man über einen Button eine unterschrift erstellen und dem Datensatz zuordnen kann. Weißt du wie ich z.B. ein Feld öffnen kann wo man unterschreiben und das dann speichern kann.
  • Hallo
    Wenn das so ist wird es langsam Zeit des Codes auch zu verstehen.
    Was tut er den er setzt den Pinsel (Paint) auf die Farbe weiß.
    Es wird ein nicht gefülltes Bitmap erstellt wenn du es weiß haben willst musst du es füllen.
    Und den Stift (Paint) auf schwarz stellen.
    Schaue dir an wie man auf das das Canvas zeichnen kannst. Grundlagen Android Canvas.


    Wenn du die APP 1zu1 hast, hast du gar kein Layout. Sondern benutzt gleich die View Klasse als Layout.
    Schaue dir an wie du eine eigene View Kasse in ein Xml Layout einbinden kannst
    vogella.com/tutorials/AndroidCustomViews/article.html
    Ein Feedback auf Tipps ist auch schön. :P

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von jogimuc ()

  • Ja gebe mein Bestes das zu verstehen habe ich auch schon ein wenig. Also ich habe das Bitmap auf Hellgrau und das Paint auf Schwarz gesetzt dann die Bitmap auf eine Höhe von 300px. Das Problem ist gerade das das Canvas noch über den ganzen Bildschirm geht und ich versuche das gerade zu verändern und dann darunter über die Klasse View auch noch die Buttons einzufügen.
  • Hatte in letzer zeit ne menge zu tun und konnte mich nicht mit dem Programm beschäftigen. Ich habe mich jetzt wieder rein gelesen und komme immer noch nicht weiter. Hier mal der Quelltext für die Unterschrift.

    Quellcode

    1. package com.example.unterschrift;
    2. import android.app.Activity;
    3. import android.graphics.Color;
    4. import android.os.Bundle;
    5. import android.view.Menu;
    6. import android.view.MenuInflater;
    7. import android.view.MenuItem;
    8. import android.view.View;
    9. import android.view.ViewGroup;
    10. import android.widget.Button;
    11. import android.widget.LinearLayout;
    12. import static java.lang.Boolean.TRUE;
    13. public class MainActivity extends Activity {
    14. private static final int MENU_CLEAR = Menu.FIRST;
    15. private static final int MENU_SAVE = Menu.FIRST+1;
    16. private static final int MENU_LOAD = Menu.FIRST+2;
    17. private DrawView drawView = null;
    18. @Override
    19. public void onCreate(Bundle savedInstanceState) {
    20. super.onCreate(savedInstanceState);
    21. Button clear = new Button(this);
    22. clear.setText("Clear");
    23. clear.setLayoutParams(new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT));
    24. clear.setX(350);
    25. clear.setY(350);
    26. clear.setVisibility(View.VISIBLE);
    27. drawView = new DrawView(this);
    28. drawView.setBackgroundColor(Color.BLACK);
    29. setContentView(drawView);
    30. drawView.requestFocus();
    31. }
    32. @Override
    33. public boolean onCreateOptionsMenu(Menu menu) {
    34. MenuInflater inflater = getMenuInflater();
    35. inflater.inflate(R.menu.menu, menu);
    36. return super.onCreateOptionsMenu(menu);
    37. }
    38. @Override
    39. public boolean onOptionsItemSelected(MenuItem item) {
    40. int id = item.getItemId();
    41. if (id == R.id.clearButton) {
    42. drawView.clearBitmap();
    43. return true;
    44. }
    45. if (id == R.id.abbrButton) {
    46. return true;
    47. }
    48. if (id == R.id.saveButton) {
    49. drawView.saveBitmap();
    50. return true;
    51. }
    52. return super.onOptionsItemSelected(item);
    53. }
    54. }
    Alles anzeigen

    DrawView:

    Java-Quellcode

    1. package com.example.unterschrift;
    2. import java.io.File;
    3. import java.io.FileNotFoundException;
    4. import java.io.FileOutputStream;
    5. import java.io.IOException;
    6. import android.content.Context;
    7. import android.graphics.Bitmap;
    8. import android.graphics.Bitmap.CompressFormat;
    9. import android.graphics.BitmapFactory;
    10. import android.graphics.Canvas;
    11. import android.graphics.Color;
    12. import android.graphics.Paint;
    13. import android.os.Environment;
    14. import android.view.MotionEvent;
    15. import android.view.View;
    16. import android.view.ViewGroup;
    17. import android.widget.Button;
    18. import android.widget.LinearLayout;
    19. public class DrawView extends View {
    20. private Paint paint = new Paint();
    21. private float lastX, lastY;
    22. private boolean drawing = false;
    23. private Bitmap bitmap;
    24. private Canvas canvas;
    25. private Context context;
    26. public DrawView(Context context) {
    27. super(context);
    28. setFocusable(true);
    29. paint.setAntiAlias(true);
    30. paint.setARGB(255,0 ,255, 255);
    31. }
    32. @Override
    33. protected void onSizeChanged(int w, int h, int oldw, int oldh) {
    34. bitmap = Bitmap.createBitmap(w, h, Bitmap.Config.RGB_565);
    35. canvas = new Canvas(bitmap);
    36. bitmap.setHeight(300);
    37. bitmap.eraseColor(Color.LTGRAY);
    38. if (bitmap != null) {
    39. canvas.drawBitmap(bitmap, 0 , 0, null);
    40. }
    41. invalidate();
    42. }
    43. @Override
    44. protected void onDraw(Canvas canvas) {
    45. super.onDraw(canvas);
    46. if (bitmap != null) {
    47. canvas.drawBitmap(bitmap, 0 , 0, null);
    48. }
    49. }
    50. @Override
    51. public boolean onTouchEvent(MotionEvent event) {
    52. if (event.getAction() == MotionEvent.ACTION_DOWN) {
    53. drawPoint(event.getX(), event.getY(), event.getPressure());
    54. return true;
    55. }
    56. else if (event.getAction() == MotionEvent.ACTION_UP) {
    57. drawing = false;
    58. return true;
    59. }
    60. else if (event.getAction() == MotionEvent.ACTION_MOVE) {
    61. drawing = true;
    62. drawPoint(event.getX(), event.getY(), event.getPressure());
    63. return true;
    64. }
    65. return false;
    66. }
    67. private void drawPoint(float x, float y, float pressure) {
    68. if (bitmap != null) {
    69. //int pressureLevel = (int)(pressure * 255);
    70. //paint.setARGB(pressureLevel, 255, 255, 255);
    71. paint.setARGB(255, 0, 0, 0);
    72. if (drawing) {
    73. canvas.drawLine(lastX, lastY, x, y, paint);
    74. }
    75. else {
    76. canvas.drawPoint(x, y, paint);
    77. }
    78. lastX = x;
    79. lastY = y;
    80. invalidate();
    81. }
    82. }
    83. public void clearBitmap() {
    84. if (canvas != null) {
    85. paint.setARGB(255, 255, 255, 255);
    86. canvas.drawPaint(paint);
    87. invalidate();
    88. }
    89. }
    90. public void saveBitmap() {
    91. if (bitmap != null) {
    92. try {
    93. String path = Environment.getExternalStorageDirectory() + "/unterschrift/signatures";
    94. File dir = new File(path);
    95. if (!dir.exists() || !dir.isDirectory()) {
    96. dir.mkdirs();
    97. }
    98. File file = new File(dir.getAbsolutePath() + "/signature.png");
    99. FileOutputStream fos;
    100. fos = new FileOutputStream(file);
    101. bitmap.compress(CompressFormat.PNG, 100, fos);
    102. fos.close();
    103. }
    104. catch (FileNotFoundException e) {
    105. e.printStackTrace();
    106. }
    107. catch (IOException io) {
    108. io.printStackTrace();
    109. }
    110. }
    111. }
    112. public void loadBitmap() {
    113. String path = Environment.getExternalStorageDirectory() + "/unterschrift/signatures/signature.png";
    114. Bitmap bmp = BitmapFactory.decodeFile(path);
    115. if (bmp != null) {
    116. if (canvas != null) {
    117. canvas.drawBitmap(bmp, 0, 0, null);
    118. }
    119. invalidate();
    120. }
    121. }
    122. }
    Alles anzeigen
    1.
    es wird bei mir das menu nicht angezeigt
    2.
    ich weiß nicht wie ich die Größe des Canvas anpassen kann.
  • Hallo
    Wenn ich mir deinen Code so ansehe sehe ich das du meinen Link nicht gelesen hast.
    Du wolltest es doch selber machen. Sehe da wenig davon.


    Schaue dir mal an was setcontentview macht. Du übergibst da nur deine Klasse.
    Der Button wird so nie angezeigt werden.


    Sinnvoll wäre ein richtiges Xml Layout mit deiner Klasse als Widget zu machen dort auch den Button …. zu erstellen.


    Da zu brauchst du aber auch den richtigen Costrucktor in deiner Klasse.


    Und diese Layout lädst so wie sonst auch in setcontentview.
    Ein Feedback auf Tipps ist auch schön. :P
  • Hallo ich hoffe du hast verstanden was ich meine.
    Du musst ein normales xml machen wie bei jeder activity. In disem layout fügst du deine von view abgeleitete klasse als widget ein. Das geht meistens nur im XML Code nicht im Designer.
    Dort gibst du die gleichen Parameter Höhe Breite...wie bei zb einem imageview an.

    Da aber somit der Klasse auch Parameter übergeben werden mußt du auch einen Konstruktor mit Context und Attribute erstellen.
    DrawView(Context context, AttributeSet attrs)......



    vogella.com/tutorials/AndroidCustomViews/article.html
    Ein Feedback auf Tipps ist auch schön. :P
  • Ja das habe ich an sich verstanden und probiere das so umzusetzen. Das Layout als xml mit der Klasse als Widget hatte ich auch schon erstellt aber als ich das mit setContentView eingefügt habe startet die App nicht mehr da ich keinen Richtigen Konstruktor habe.
    Ich habe mit deinem und diesem Link probiert das heraus zu finden. Kannst du mir ein Beispiel für einen Konstruktor zeigen wo ein Button mitgegeben wird? Ist das so richtig public DrawView(Context context, Button clear,Button abbr, Button save) {
  • Den Button machst du ganz normal in deinem Layout und in der activity. Hat nichts mit der view Klasse zu tun.
    Ist das selbe wie in allen anderen activtys.

    Der Konstruktor hat damit nichts zu tun.
    Welchen Konstruktor du benutzen sollt habe ich dir gesagt natürlich mußt du da auch die super klasse aufrufen genau wie in dem link.
    Ein Feedback auf Tipps ist auch schön. :P
  • So das Layout wird jetzt richtig geladen. Ich habe die drei Buttons auch hinzugefügt das sie an der richtigen stelle sind. Jetzt habe ich onClicklistener hinzugefügt und da jetzt die Methoden drawView.clearBitmap(); und drawView.saveBitmap() ausführen.

    abbr.setOnClickListener(new OnClickListener() {
    @Override
    public void onClick(View v) {
    drawView.clearBitmap();
    }
    });wenn ich das einfüge startet die App aber nicht mehr und ich weiß nicht warum.
  • Ok habe meinen Fehler gefunden und bin auf den nächsten gestoßen. Die App lässt sich nun ausführen jedoch crasht sie sobald er drawView.clearBitmap(); ausführen soll.
    Error: Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void com.example.unterschrift.DrawView.clearBitmap()' on a null object reference
  • Hallo du must dir schon von deiner view mittels der Id und findviewbyId für die Instanz holen. Was du versuchst zu benutzen ist die Klasse (groß Buchstaben) nicht das Objekt.

    Ist das selbe wie bei einer normalen view zb Textview.

    Grundlagen OOP lernnen würde ich sagen.
    Vieleicht auch die links die dir gegen werden lesen vorallen verstehen.
    Auch versuchen zu verstehen was die Fehlermeldung bedeutet.
    Ein Feedback auf Tipps ist auch schön. :P