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

  • Button Sichtbarkeiten oder Mitnahme von Variablen

    Hey habe nochmal eine Frage bzw. können auch noch mehr werden ;)
    Und zwar möchte ich einen Delete Button erst sichbar machen nachdem ich einen anderen Button geklickt habe oder auch einfach den Delete Button in eine neue Activity übernehmen dann muss ich nicht mit der sichtbarkeit bzw. meinen Scrips spielen.
    Hier mein Quellcode (ich poste einfach mal alles)


    eintrag_layout.xml

    XML-Quellcode

    1. <?xml version="1.0" encoding="utf-8"?>
    2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    3. android:layout_width="match_parent"
    4. android:layout_height="match_parent"
    5. android:orientation="horizontal" >
    6. <TextView
    7. android:id="@+id/eintragTextView"
    8. android:layout_width="0dip"
    9. android:layout_height="wrap_content"
    10. android:layout_weight="1"
    11. android:text=""
    12. android:textSize="20dip" />
    13. <ImageButton
    14. android:id="@+id/editButton"
    15. android:layout_width="wrap_content"
    16. android:layout_height="wrap_content"
    17. android:contentDescription="bearbeiten"
    18. android:onClick="doEdit"
    19. android:src="@android:drawable/ic_menu_edit" />
    20. <ImageButton
    21. android:id="@+id/deleteButton"
    22. android:layout_width="wrap_content"
    23. android:layout_height="wrap_content"
    24. android:contentDescription="löschen"
    25. android:onClick="doDelete"
    26. android:src="@android:drawable/ic_menu_zoom"
    27. android:visibility="visible" />
    28. </LinearLayout>
    Alles anzeigen

    menu.xml

    XML-Quellcode

    1. <?xml version="1.0" encoding="utf-8"?>
    2. <menu xmlns:android="http://schemas.android.com/apk/res/android"
    3. xmlns:app="http://schemas.android.com/apk/res-auto"
    4. xmlns:tools="http://schemas.android.com/tools"
    5. tools:context="@tools:sample/date/ddmmyy">
    6. <item
    7. android:id="@+id/selectButton"
    8. android:icon="@android:drawable/ic_menu_revert"
    9. android:title="@string/liste_start"
    10. app:showAsAction="always" />
    11. <item
    12. android:id="@+id/hinzufuegenButton"
    13. android:icon="@android:drawable/ic_menu_add"
    14. android:title="@string/neuer_eintrag"
    15. app:showAsAction="always" />
    16. </menu>
    Alles anzeigen

    styles.xml

    Quellcode

    1. <resources>
    2. <!-- Base application theme. -->
    3. <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
    4. <!-- Customize your theme here. -->
    5. <item name="colorPrimary">@color/colorPrimary</item>
    6. <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
    7. <item name="colorAccent">@color/colorAccent</item>
    8. </style>
    9. </resources>
    Alles anzeigen

    stings.xml

    Quellcode

    1. <resources>
    2. <string name="app_name">ParseApp</string>
    3. <string name="basis_url">http://10.222.100.128/</string>
    4. <string name="hinzufuegenButton">Aktualisieren</string>
    5. <string name="neuerEintrag">Neuer Eintrag</string>
    6. <string name="neuer_eintrag">Neuer Eintrag</string>
    7. <string name="liste_start">Start</string>
    8. </resources>

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

  • MainActivity.java

    Quellcode

    1. package com.example.parseapp;
    2. import org.json.JSONArray;
    3. import org.json.JSONException;
    4. import org.json.JSONObject;
    5. import android.app.Activity;
    6. import android.app.AlertDialog;
    7. import android.content.DialogInterface;
    8. import android.os.Bundle;
    9. import android.view.Menu;
    10. import android.view.MenuInflater;
    11. import android.view.MenuItem;
    12. import android.view.View;
    13. import android.view.ViewGroup;
    14. import android.widget.Button;
    15. import android.widget.EditText;
    16. import android.widget.ImageButton;
    17. import android.widget.ListView;
    18. import android.widget.Toast;
    19. import androidx.appcompat.app.AppCompatActivity;
    20. public class MainActivity extends AppCompatActivity implements DBResultHandler {
    21. private EintragAdapter eintragAdapter;
    22. private EditText eingabefeld;
    23. private Eintrag eintrag;
    24. @Override
    25. public void onCreate(Bundle savedInstanceState) {
    26. super.onCreate(savedInstanceState);
    27. setContentView(R.layout.activity_main);
    28. ListView listView = (ListView) findViewById(R.id.container);
    29. eintragAdapter = new EintragAdapter(this);
    30. listView.setAdapter(eintragAdapter);
    31. ladeDaten();
    32. }
    33. private void ladeDaten() {
    34. (new DBRequestTask(this)).execute(getString(R.string.basis_url)
    35. + "selectm.php");
    36. }
    37. @Override
    38. public boolean onCreateOptionsMenu(Menu menu) {
    39. MenuInflater inflater = getMenuInflater();
    40. inflater.inflate(R.menu.menu, menu);
    41. return super.onCreateOptionsMenu(menu);
    42. }
    43. @Override
    44. public boolean onOptionsItemSelected(MenuItem item) {
    45. int id = item.getItemId();
    46. if (id == R.id.hinzufuegenButton) {
    47. neuerEintrag();
    48. return true;
    49. }
    50. if (id == R.id.selectButton) {
    51. reSelect();
    52. return true;
    53. }
    54. return super.onOptionsItemSelected(item);
    55. }
    56. private void reSelect() {
    57. (new DBRequestTask(this)).execute(getString(R.string.basis_url)
    58. + "selectm.php");
    59. }
    60. private void neuerEintrag() {
    61. AlertDialog.Builder alertBuilder = new AlertDialog.Builder(this);
    62. alertBuilder.setTitle("Neuer Eintrag");
    63. eingabefeld = new EditText(this);
    64. alertBuilder.setView(eingabefeld);
    65. alertBuilder.setCancelable(true);
    66. alertBuilder.setNegativeButton("Abbrechen",
    67. new DialogInterface.OnClickListener() {
    68. @Override
    69. public void onClick(DialogInterface dialog, int which) {
    70. dialog.cancel();
    71. }
    72. });
    73. alertBuilder.setPositiveButton("OK",
    74. new DialogInterface.OnClickListener() {
    75. @Override
    76. public void onClick(DialogInterface dialog, int which) {
    77. (new DBRequestTask(MainActivity.this)).execute(
    78. getString(R.string.basis_url) + "insert.php", "Name",
    79. eingabefeld.getText().toString());
    80. }
    81. });
    82. alertBuilder.create().show();
    83. }
    84. public void doEdit(View view) {
    85. if (view.getTag() instanceof Eintrag) {
    86. eintrag = (Eintrag) view.getTag();
    87. AlertDialog.Builder alertBuilder = new AlertDialog.Builder(this);
    88. alertBuilder.setTitle("Eintrag bearbeiten");
    89. eingabefeld = new EditText(this);
    90. eingabefeld.setText(eintrag.getEintrag());
    91. alertBuilder.setView(eingabefeld);
    92. alertBuilder.setCancelable(true);
    93. alertBuilder.setNegativeButton("Abbrechen",
    94. new DialogInterface.OnClickListener() {
    95. @Override
    96. public void onClick(DialogInterface dialog, int which) {
    97. dialog.cancel();
    98. }
    99. });
    100. alertBuilder.setPositiveButton("OK",
    101. new DialogInterface.OnClickListener() {
    102. @Override
    103. public void onClick(DialogInterface dialog, int which) {
    104. (new DBRequestTask(MainActivity.this)).execute(
    105. getString(R.string.basis_url)
    106. + "update.php", "Name",
    107. eingabefeld.getText().toString(), "ID",
    108. Integer.toString(eintrag.getId()));
    109. }
    110. });
    111. alertBuilder.create().show();
    112. }
    113. }
    114. public void doDelete(View view) {
    115. if (view.getTag() instanceof Eintrag) {
    116. eintrag = (Eintrag) view.getTag();
    117. (new DBRequestTask(MainActivity.this)).execute(
    118. getString(R.string.basis_url) + "select.php", "ID",
    119. Integer.toString(eintrag.getId()));
    120. }
    121. }
    122. @Override
    123. public void ergebnisVerarbeiten(String ergebnis) {
    124. try {
    125. JSONObject jsonErgebnis = new JSONObject(ergebnis);
    126. JSONArray statusArray = jsonErgebnis.getJSONArray("Status");
    127. int status = statusArray.getInt(0);
    128. switch (status) {
    129. case 0:
    130. JSONArray datenArray = jsonErgebnis.getJSONArray("Liste");
    131. eintragAdapter.getEintragListe().clear();
    132. for (int i = 0; i < datenArray.length(); i++) {
    133. JSONObject einzelsatz = datenArray.getJSONObject(i);
    134. eintragAdapter.getEintragListe().add(
    135. new Eintrag(einzelsatz.getInt("ID"), einzelsatz
    136. .getString("Name")));
    137. }
    138. eintragAdapter.notifyDataSetChanged();
    139. break;
    140. case 1:
    141. Toast.makeText(this, statusArray.getString(1),
    142. Toast.LENGTH_SHORT).show();
    143. ladeDaten();
    144. break;
    145. case 2:
    146. Toast.makeText(this, statusArray.getString(1),
    147. Toast.LENGTH_SHORT).show();
    148. ladeDaten();
    149. break;
    150. case 3:
    151. Toast.makeText(this, statusArray.getString(1),
    152. Toast.LENGTH_SHORT).show();
    153. ladeDaten();
    154. break;
    155. default:
    156. Toast.makeText(this, statusArray.getString(1),
    157. Toast.LENGTH_SHORT).show();
    158. break;
    159. }
    160. } catch (JSONException e) {
    161. Toast.makeText(this,
    162. "Serverantwort konnte nicht verarbeitet werden",
    163. Toast.LENGTH_SHORT).show();
    164. }
    165. }
    166. }
    Alles anzeigen
  • Eintrag.java

    Quellcode

    1. package com.example.parseapp;
    2. public class Eintrag {
    3. private int id;
    4. private String eintrag;
    5. public int getId() {
    6. return id;
    7. }
    8. public void setId(int id) {
    9. this.id = id;
    10. }
    11. public String getEintrag() {
    12. return eintrag;
    13. }
    14. public void setEintrag(String eintrag) {
    15. this.eintrag = eintrag;
    16. }
    17. public Eintrag(int id, String eintrag) {
    18. this.id = id;
    19. this.eintrag = eintrag;
    20. }
    21. }
    Alles anzeigen


    EintragAdapter.java

    Java-Quellcode

    1. package com.example.parseapp;
    2. import android.content.Context;
    3. import android.view.LayoutInflater;
    4. import android.view.View;
    5. import android.view.ViewGroup;
    6. import android.widget.BaseAdapter;
    7. import android.widget.TextView;
    8. import java.util.ArrayList;
    9. public class EintragAdapter extends BaseAdapter {
    10. private ArrayList<Eintrag> eintragListe;
    11. private Context context;
    12. public EintragAdapter(Context context) {
    13. super();
    14. this.eintragListe = new ArrayList<Eintrag>();
    15. this.context = context;
    16. }
    17. public ArrayList<Eintrag> getEintragListe() {
    18. return eintragListe;
    19. }
    20. @Override
    21. public int getCount() {
    22. return eintragListe.size();
    23. }
    24. @Override
    25. public Object getItem(int position) {
    26. return eintragListe.get(position);
    27. }
    28. @Override
    29. public long getItemId(int position) {
    30. return eintragListe.get(position).getId();
    31. }
    32. @Override
    33. public View getView(int position, View convertView, ViewGroup parent) {
    34. View view = convertView;
    35. if (view == null) {
    36. LayoutInflater inflater = (LayoutInflater) context
    37. .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    38. view = inflater.inflate(R.layout.eintrag_layout, parent, false);
    39. }
    40. TextView textView = (TextView) view.findViewById(R.id.eintragTextView);
    41. textView.setText(eintragListe.get(position).getEintrag());
    42. View deleteButton = view.findViewById(R.id.deleteButton);
    43. deleteButton.setTag(eintragListe.get(position));
    44. View editButton = view.findViewById(R.id.editButton);
    45. editButton.setTag(eintragListe.get(position));
    46. return view;
    47. }}
    Alles anzeigen
    DBRequestTask.java

    Java-Quellcode

    1. package com.example.parseapp;
    2. import android.os.AsyncTask;
    3. import java.io.BufferedWriter;
    4. import java.io.InputStream;
    5. import java.io.InputStreamReader;
    6. import java.io.OutputStream;
    7. import java.io.OutputStreamWriter;
    8. import java.net.HttpURLConnection;
    9. import java.net.URL;
    10. import java.net.URLEncoder;
    11. import static android.provider.Settings.System.getString;
    12. public class DBRequestTask extends AsyncTask<String, Void, String> {
    13. private DBResultHandler handler;
    14. public DBRequestTask(DBResultHandler handler) {
    15. super();
    16. this.handler = handler;
    17. }
    18. @Override
    19. protected String doInBackground(String... params) {
    20. String ergebnis = "";
    21. try {
    22. if (params.length % 2 == 0)
    23. throw new Exception("Gerade Zahl an params ist nicht logisch");
    24. URL url = new URL(params[0]);
    25. HttpURLConnection conn = (HttpURLConnection) url.openConnection();
    26. conn.setReadTimeout(10000);
    27. conn.setConnectTimeout(15000);
    28. conn.setRequestMethod("POST");
    29. conn.setDoInput(true);
    30. conn.setDoOutput(true);
    31. if (params.length > 1) {
    32. StringBuilder postDaten = new StringBuilder();
    33. boolean erster = true;
    34. for (int i = 1; i < params.length; i = i + 2) {
    35. if (erster) {
    36. erster = false;
    37. } else {
    38. postDaten.append("&");
    39. }
    40. postDaten.append(URLEncoder.encode(params[i], "UTF-8"));
    41. postDaten.append("=");
    42. postDaten.append(URLEncoder.encode(params[i + 1], "UTF-8"));
    43. }
    44. OutputStream os = conn.getOutputStream();
    45. BufferedWriter writer = new BufferedWriter(
    46. new OutputStreamWriter(os, "UTF-8"));
    47. writer.write(postDaten.toString());
    48. writer.flush();
    49. writer.close();
    50. os.close();
    51. }
    52. conn.connect();
    53. StringBuilder antwort = new StringBuilder("");
    54. InputStream inputStream = conn.getInputStream();
    55. InputStreamReader reader = new InputStreamReader(inputStream,
    56. "UTF-8");
    57. char[] buffer = new char[128];
    58. while (reader.read(buffer) > 0) {
    59. antwort.append(buffer);
    60. }
    61. inputStream.close();
    62. ergebnis = antwort.toString();
    63. } catch (Exception e) {
    64. ergebnis = "{\"Status\":[\"-1\",\"HTTP Connection Problem\"]}";
    65. }
    66. return ergebnis;
    67. }
    68. @Override
    69. protected void onPostExecute(String result) {
    70. handler.ergebnisVerarbeiten(result);
    71. }
    72. }
    Alles anzeigen
  • Hallo
    Das sichtbar und unsichtbar kannst du mit setVisibility( ) machen.
    Ist auch im XML verfügbar. android:visibility="visible"



    Wie immer hilft auch hier ein Blick in die Doku, zu View.


    developer.android.com/reference/android/view/View
    developer.android.com/referenc…ew/View#setVisibility(int)


    Auch hier siehst du wie du zu der ID kommst mit findViewByID um das setVisibility anzuwenden.
    Da du noch mit dem veralteten XML Tag „onClick“ arbeitest hast du das auch nicht in Java benutzt.


    Mit etwas Google suche ist so etwas leicht zu finden. Und Doku lesen bildet auch.


    PS. Komisch das hier viele online waren aber keiner gibt dieses einfache Grundwissen weiter.
    Ein Feedback auf Tipps ist auch schön. :P
  • Danke für die Antwort das mit der ID habe ich schon hin bekommen kurz nachdem ich das Thema auf gemacht habe. Und bei der Visibility habe ich das Problem das ich die Buttons nicht normal mit findViewByID deklariere deswegen weiß ich nicht genau wie ich diesen Button ansprechen soll.


    Quellcode

    1. public void doSelect(View view) {
    2. if (view.getTag() instanceof Eintrag) {
    3. eintrag = (Eintrag) view.getTag();
    4. (new DBRequestTask(MainActivity.this)).execute(
    5. getString(R.string.basis_url) + "select.php", "ID",
    6. Integer.toString(eintrag.getId()));
    7. rid = eintrag.getId();
    8. Toast.makeText(this,String.valueOf(rid),Toast.LENGTH_LONG).show();
    9. }
    10. }
    in der Methode möchte ich den Button der diese aufruft(selectButton) nach dem klick unsichtbar machen und einen anderen, den ich noch nicht eingefügt habe, sichtbar machen.
  • ich das Problem das ich die Buttons nicht normal mit findViewByID deklariere deswegen weiß ich nicht genau wie ich diesen Button ansprechen soll.
    Du musst die id schon mit findViewById erst mal suchen danach kannst du drauf zugreifen.

    FindViewById ist kein Deklariren sondern das suchen einer vorhandnen ID.
    Die wird beim laden des Layouts mit setContentView erstellt. Weißt du vorher nicht deshalb musst du sie zu Laufzeit suchen.

    in der Methode möchte ich den Button der diese aufruft(selectButton) nach dem klick unsichtbar machen und einen anderen, den ich noch nicht eingefügt habe, sichtbar machen.
    geht nicht der Button muss schon vorhanden sein. mache den im xml Layout unsichtbar dann kanst du ihn auch sichtbar machen.

    Quellcode

    1. public void doSelect(View view) {
    2. if (view.getTag() instanceof Eintrag) {
    3. Button bt = findViewByID(R.id.ButtonLöschen ) ;
    4. bt. setVisibility(View.INVISIBLE );
    5. eintrag = (Eintrag) view.getTag();
    6. (new DBRequestTask(MainActivity.this)).execute(
    7. getString(R.string.basis_url) + "select.php", "ID",
    8. Integer.toString(eintrag.getId()));
    9. rid = eintrag.getId();
    10. Toast.makeText(this,String.valueOf(rid),Toast.LENGTH_LONG).show();
    11. Button bt = view.getId();
    12. bt.setVisibility(View.INVISIBLE );
    13. Button bt2 = findViewByID(R.id.Button sichtbar machen);
    14. bt2. setVisibility(View.VISIBLE );
    15. }
    16. }
    Alles anzeigen
    Ein Feedback auf Tipps ist auch schön. :P

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von nono124 ()

  • Ja das stimmt war aber der Meinung beides ausprobiert zu haben aber immerhin wird das ja jetzt erkannt. Jetzt ist das Problem das dieser Button sich in einem ListView befindet und wenn ich diesen dann betätige wird ein neues select Statement dargestellt wo der Button immer noch angezeigt wird.
  • Ich habe meine MainActivity so angepasst das der Button der vorerst für das löschen da war jetzt ein select Statement aufruft welches dann in das ListView eingetragen wird. Also wenn ich bei Katrin Oy auf die Lupe klicke kommt das ListView mit dem Eintrag PC 123456 wo die Lupe eigentlich unsichtbar(bzw. View.GONE) sein müsste. Da ich dort an der Stelle der Lupe einen anderen Button zum löschen einfügen will. Wenn ich Dann auf den zurück Button klicke welcher oben im Menü zu sehen ist klicke soll der Button (die Lupe) wieder sichtbar sein.
  • Du willst also wenn du auf die Lupe bei Katrin Oy Klickst das in der neuen Liste oder was ist das? Bei PC 123456 nicht die Lupe sondern ein anders Ikon angezeigt wirt.
    Wie kommst du zu der zweiten Anzeige?


    Eine Liste ist dynamisch wird immer wider neu eingelesen wenn du zurück gehst.
    Wenn du für jedes Item ein anders Symbol willst musst du das im Adapter der Liste machen.


    Wie kommst du zu der zweiten liste? Du löschst nicht etwa die ArrayListe die du dem Adapter übergeben hast. Fragst die DB neu ab und speicherst das wider in der Arrayliste und zeigst die liste an. Das wird so nicht gehen dafür solltest du schon zwei listen benutzen oder einen Dialog anzeigen in dem dann das PC1234567 steht.

    Wenn es so ist musst du schon im Adapter herausfinden was angezeigt wird damit du im Adapter auch das ein anderes Layout für die Items benutzen kannst.
    Das vorherige unsichtbar machen ist ja mit dem neu einlesen und zeichnen weg.
    Am einfachste zwei getrennte Listen.


    Zeige mal deinen Code.


    Was soll eigentlich passieren nachdem du die zweite Liste angezeigt hast? Ist dann der Datensatz noch vorhanden? Oder gelöscht.
    Ein Feedback auf Tipps ist auch schön. :P
  • Hey hatte ein wenig viel zu tum und kann mich jetzt erst wieder an die app setzten. Also zurzeit ist es so das ich in die gleiche Liste ein neues select schreibe. Ich hänge hier mal meine mainActivity an

    Quellcode

    1. package com.example.parseapp;
    2. import org.json.JSONArray;
    3. import org.json.JSONException;
    4. import org.json.JSONObject;
    5. import android.app.Activity;
    6. import android.app.AlertDialog;
    7. import android.content.DialogInterface;
    8. import android.os.Bundle;
    9. import android.view.Menu;
    10. import android.view.MenuInflater;
    11. import android.view.MenuItem;
    12. import android.view.View;
    13. import android.view.ViewGroup;
    14. import android.widget.Button;
    15. import android.widget.EditText;
    16. import android.widget.ImageButton;
    17. import android.widget.ListView;
    18. import android.widget.Toast;
    19. import androidx.appcompat.app.AppCompatActivity;
    20. import static java.sql.Types.NULL;
    21. public class MainActivity extends AppCompatActivity implements DBResultHandler {
    22. private EintragAdapter eintragAdapter;
    23. private EditText eingabefeld;
    24. private EditText eingabefeld1;
    25. private Eintrag eintrag;
    26. int rid=NULL;
    27. @Override
    28. public void onCreate(Bundle savedInstanceState) {
    29. super.onCreate(savedInstanceState);
    30. setContentView(R.layout.activity_main);
    31. ListView listView = (ListView) findViewById(R.id.container);
    32. eintragAdapter = new EintragAdapter(this);
    33. listView.setAdapter(eintragAdapter);
    34. if (rid==NULL) { ladeDaten();}
    35. }
    36. private void ladeDaten() {
    37. (new DBRequestTask(this)).execute(getString(R.string.basis_url)
    38. + "selectm.php");
    39. }
    40. @Override
    41. public boolean onCreateOptionsMenu(Menu menu) {
    42. MenuInflater inflater = getMenuInflater();
    43. inflater.inflate(R.menu.menu, menu);
    44. return super.onCreateOptionsMenu(menu);
    45. }
    46. @Override
    47. public boolean onOptionsItemSelected(MenuItem item) {
    48. int id = item.getItemId();
    49. if (id == R.id.hinzufuegenButton) {
    50. neuerEintrag();
    51. return true;
    52. }
    53. if (id == R.id.reselectButton) {
    54. reSelect();
    55. return true;
    56. }
    57. return super.onOptionsItemSelected(item);
    58. }
    59. private void reSelect() {
    60. (new DBRequestTask(this)).execute(getString(R.string.basis_url)
    61. + "selectm.php");
    62. rid=NULL;
    63. Toast.makeText(this,String.valueOf(rid),Toast.LENGTH_LONG).show();
    64. }
    65. private void neuerEintrag() {
    66. AlertDialog.Builder alertBuilder = new AlertDialog.Builder(this);
    67. alertBuilder.setTitle("Neuer Eintrag");
    68. eingabefeld = new EditText(this);
    69. eingabefeld1 = new EditText(this);
    70. alertBuilder.setView(eingabefeld);
    71. alertBuilder.setCancelable(true);
    72. alertBuilder.setNegativeButton("Abbrechen",
    73. new DialogInterface.OnClickListener() {
    74. @Override
    75. public void onClick(DialogInterface dialog, int which) {
    76. dialog.cancel();
    77. }
    78. });
    79. alertBuilder.setPositiveButton("OK",
    80. new DialogInterface.OnClickListener() {
    81. @Override
    82. public void onClick(DialogInterface dialog, int which) {
    83. (new DBRequestTask(MainActivity.this)).execute(
    84. getString(R.string.basis_url) + "insert.php", "Name",
    85. eingabefeld.getText().toString(), "ID", eingabefeld1.getText().toString());
    86. }
    87. });
    88. alertBuilder.create().show();
    89. }
    90. public void doEdit(View view) {
    91. if (view.getTag() instanceof Eintrag) {
    92. eintrag = (Eintrag) view.getTag();
    93. AlertDialog.Builder alertBuilder = new AlertDialog.Builder(this);
    94. alertBuilder.setTitle("Eintrag bearbeiten");
    95. eingabefeld = new EditText(this);
    96. eingabefeld.setText(eintrag.getEintrag());
    97. alertBuilder.setView(eingabefeld);
    98. alertBuilder.setCancelable(true);
    99. alertBuilder.setNegativeButton("Abbrechen",
    100. new DialogInterface.OnClickListener() {
    101. @Override
    102. public void onClick(DialogInterface dialog, int which) {
    103. dialog.cancel();
    104. }
    105. });
    106. alertBuilder.setPositiveButton("OK",
    107. new DialogInterface.OnClickListener() {
    108. @Override
    109. public void onClick(DialogInterface dialog, int which) {
    110. (new DBRequestTask(MainActivity.this)).execute(
    111. getString(R.string.basis_url)
    112. + "update.php", "Name",
    113. eingabefeld.getText().toString(), "ID",
    114. Integer.toString(eintrag.getId()));
    115. }
    116. });
    117. alertBuilder.create().show();
    118. }
    119. }
    120. public void doSelect(View view) {
    121. if (view.getTag() instanceof Eintrag) {
    122. ImageButton select = findViewById(R.id.selectButton ) ;
    123. select. setVisibility(View.GONE );
    124. eintrag = (Eintrag) view.getTag();
    125. (new DBRequestTask(MainActivity.this)).execute(
    126. getString(R.string.basis_url) + "select.php", "ID",
    127. Integer.toString(eintrag.getId()));
    128. rid = eintrag.getId();
    129. Toast.makeText(this,String.valueOf(rid),Toast.LENGTH_LONG).show();
    130. }
    131. }
    132. @Override
    133. public void ergebnisVerarbeiten(String ergebnis) {
    134. try {
    135. JSONObject jsonErgebnis = new JSONObject(ergebnis);
    136. JSONArray statusArray = jsonErgebnis.getJSONArray("Status");
    137. int status = statusArray.getInt(0);
    138. switch (status) {
    139. case 0:
    140. JSONArray datenArray = jsonErgebnis.getJSONArray("Liste");
    141. eintragAdapter.getEintragListe().clear();
    142. for (int i = 0; i < datenArray.length(); i++) {
    143. JSONObject einzelsatz = datenArray.getJSONObject(i);
    144. eintragAdapter.getEintragListe().add(
    145. new Eintrag(einzelsatz.getInt("ID"), einzelsatz
    146. .getString("Name")));
    147. }
    148. eintragAdapter.notifyDataSetChanged();
    149. break;
    150. case 1:
    151. Toast.makeText(this, statusArray.getString(1),
    152. Toast.LENGTH_SHORT).show();
    153. if (rid==NULL) { ladeDaten();}
    154. break;
    155. case 2:
    156. Toast.makeText(this, statusArray.getString(1),
    157. Toast.LENGTH_SHORT).show();
    158. if (rid==NULL) { ladeDaten();}
    159. break;
    160. case 3:
    161. Toast.makeText(this, statusArray.getString(1),
    162. Toast.LENGTH_SHORT).show();
    163. if (rid==NULL) { ladeDaten();}
    164. break;
    165. default:
    166. Toast.makeText(this, statusArray.getString(1),
    167. Toast.LENGTH_SHORT).show();
    168. break;
    169. }
    170. } catch (JSONException e) {
    171. Toast.makeText(this,
    172. "Serverantwort konnte nicht verarbeitet werden",
    173. Toast.LENGTH_SHORT).show();
    174. }
    175. }
    176. }
    Alles anzeigen
  • Also wenn du die ArrayList des Adapters überschreibst wird das nicht gehen. Sagte ich auch bereits.
    Ok du hat uns die MainActivty gegen aber deinen Adapter nicht. Wenn es irgetwie gehen soll musst du das auch in deinem Adapter geben. Denn nur wird wirst du das lösen können.


    Was ich auch in deiner Activity vermisse ist ein Listener auf die Listview mit dessen Hilfe du auf einen Klick in der liste reagierst , kann aber auch sein das du das in deinem Adapter Klasse machst.


    Wenn es nach dem Daten neu laden auch anders ein soll musst du das auch in deiner DB speichern und im Adapter auch entsprechend bearbeiten.
    In Adapter werden nacheinander alle Items der Liste durchlaufen und dort musst du prüfen of es sichtbar sein soll oder nicht. Und zwar für jedes Item.


    Wenn du die Daten in der Main überschreist also in die Liste neue Daten einliest sind die alten Daten beim zurück weg.


    Das wirst du schon einen etwas größeren Aufwand im Adapter machen müssen. Wenn du an dieser nicht so sinnigen Variante festhalten willst.
    Ein Feedback auf Tipps ist auch schön. :P
  • Hab eh schon überlegt mir dafür eine neue Liste zu machen wollte nur meine Möglichkeiten überprüfen und mein Adapter ist weiter oben im Thema schon drin. Ich schaue mir das morgen mal in ruhe an und bedanke mich schon mal für deine Hilfe.

    Hier nochmal der Adapter:

    Java-Quellcode

    1. package com.example.parseapp;
    2. import android.content.Context;
    3. import android.view.LayoutInflater;
    4. import android.view.View;
    5. import android.view.ViewGroup;
    6. import android.widget.BaseAdapter;
    7. import android.widget.TextView;
    8. import java.util.ArrayList;
    9. public class EintragAdapter extends BaseAdapter {
    10. private ArrayList<Eintrag> eintragListe;
    11. private Context context;
    12. public EintragAdapter(Context context) {
    13. super();
    14. this.eintragListe = new ArrayList<Eintrag>();
    15. this.context = context;
    16. }
    17. public ArrayList<Eintrag> getEintragListe() {
    18. return eintragListe;
    19. }
    20. @Override
    21. public int getCount() {
    22. return eintragListe.size();
    23. }
    24. @Override
    25. public Object getItem(int position) {
    26. return eintragListe.get(position);
    27. }
    28. @Override
    29. public long getItemId(int position) {
    30. return eintragListe.get(position).getId();
    31. }
    32. @Override
    33. public View getView(int position, View convertView, ViewGroup parent) {
    34. View view = convertView;
    35. if (view == null) {
    36. LayoutInflater inflater = (LayoutInflater) context
    37. .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    38. view = inflater.inflate(R.layout.eintrag_layout, parent, false);
    39. }
    40. TextView textView = (TextView) view.findViewById(R.id.eintragTextView);
    41. textView.setText(eintragListe.get(position).getEintrag());
    42. View deleteButton = view.findViewById(R.id.deleteButton);
    43. deleteButton.setTag(eintragListe.get(position));
    44. View editButton = view.findViewById(R.id.editButton);
    45. editButton.setTag(eintragListe.get(position));
    46. return view;
    47. }}
    Alles anzeigen
  • Im Adapter in der getView holst du dir doch beide Ids von den Button. Also könstest du auch den einen unsichtbar machen wenn das im Daten bestand der Liste enthalten ist.
    Dazu brauchst du in der DB einen weiteren Eintrag(Spalte) in dem steht ob der Button angezeigt werden soll oder nicht. Das ja oder nein musst du im Klicklistener auch in die DB schreiben.


    Und in der getView auch abfragen und wenn nein dort steht auch unsichtbar machen. Nicht im Klicklistener.
    Ein Feedback auf Tipps ist auch schön. :P
  • Habe noch eine Frage und zwar wie kann ich hier: weitere Zeilen zum editieren einfügen?
    Hier ist der Aufruf davon:

    Quellcode

    1. public void doEdit(View view) {
    2. if (view.getTag() instanceof Eintrag) {
    3. eintrag = (Eintrag) view.getTag();
    4. AlertDialog.Builder alertBuilder = new AlertDialog.Builder(this);
    5. alertBuilder.setTitle("Eintrag bearbeiten");
    6. eingabefeld = new EditText(this);
    7. eingabefeld.setText(eintrag.getEintrag());
    8. alertBuilder.setView(eingabefeld);
    9. alertBuilder.setCancelable(true);
    10. alertBuilder.setNegativeButton("Abbrechen",
    11. new DialogInterface.OnClickListener() {
    12. @Override
    13. public void onClick(DialogInterface dialog, int which) {
    14. dialog.cancel();
    15. }
    16. });
    17. alertBuilder.setPositiveButton("OK",
    18. new DialogInterface.OnClickListener() {
    19. @Override
    20. public void onClick(DialogInterface dialog, int which) {
    21. (new DBRequestTask(MainActivity.this)).execute(
    22. getString(R.string.basis_url)
    23. + "update.php", "Name",
    24. eingabefeld.getText().toString(), "ID",
    25. Integer.toString(eintrag.getId()));
    26. }
    27. });
    28. alertBuilder.create().show();
    29. }
    30. }
    Alles anzeigen