Erweiterte Button Funktion

  • Antworten:63
  • OffenNicht stickyNicht beantwortet
  • Forum-Beiträge: 59

18.06.2017, 20:53:38 via Website

Also ich bin mal wieder an einen Punkt angekommen wo ich nicht weiterkomme. Ich wüsste noch nicht mal wie das heißt was ich vor habe und somit kam natürlich auch bei Google wenig bei raus.

Ich bin jetzt so weit, dass ich eine große Liste mit allen möglichen Begriffen (Buttons) habe.

Die Button sollen einen bestimmten Zweck erfüllen und zwar soll es möglich sein das der User diese Begriffe anklickt dann verschwindet der Begriff aus der Liste (hab ich schon geschafft) und wird dann in eine andere Liste hinzugefügt. Also Praktisch eine Liste mit Begriffen zum auswählen und diese Begriffe werden dann zu der Liste der Ausgewählten Begriffe hinzugefügt.

Hier der Code für einen Button den ich bereits geschrieben habe:

   final Animation test = AnimationUtils.loadAnimation(this, R.anim.test);
    Button btnanis = (Button) findViewById(R.id.anis);
    btnanis.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            v.startAnimation(test);
            test.setAnimationListener(new Animation.AnimationListener() {
                @Override
                public void onAnimationStart(Animation animation) {}
                @Override
                public void onAnimationRepeat(Animation animation) {}
                @Override
                public void onAnimationEnd(Animation animation) {
            final ViewGroup layout = (ViewGroup) anis.getParent();
            if (null != layout)
                layout.removeView(anis);
        }
   });
};

});}}

Ich hoffe es war alles halbwegs verständlich :)

Antworten
  • Forum-Beiträge: 59

18.06.2017, 22:13:40 via Website

Habe jetzt den Code um die Zeile

" ((TextView)findViewById(R.id.textView)).setText("Anis");"

Erweitert und jetzt fügt er den Text auch ein aber diese Veränderungen sind halt nur temporär und nicht permanent.

Also der Button ist nach dem erneuten Starten der Activity wieder da und der Text weg.

Gibt es da eine Möglichkeit die Begriffe permanent von einer Liste zur anderen zu verschieben?

Antworten
Pascal P.
  • Mod
  • Blogger
  • Forum-Beiträge: 10.169

18.06.2017, 22:34:47 via Website

Hallo Genetix,
ich glaube mit "Liste" drückst du dich umgangssprachlich aus.

In der Fachsprache ist mir Liste eine List z.b. eine List verbunden, welche dann z.b. in einer ListView angezeigt werden kann.
Damit kann man dann in dieser ListView beliebige Texte in beliebiger Anzahl hinterlegen und diese werden anezeigt und können leicht verändert und gelöscht werden.

Das ist eigentlich das was du brauchst.

Bisher nehme ich an du hast "feste" Buttons auf deinem Layout plaziert und möchtest diese verändern.
Das funktioniert, solange es ein paar Buttons sind. Jetzt stell dir aber vor deine "Liste" hat am ende mehrere 100 einträge, dann sind einzelne Buttons nicht mehr von vorteil, da programmiert man dann mit Listen und einer ListView.

Schau dir das mal an:
http://www.programmierenlernenhq.de/tutorial-android-listview-verwenden/
Kann damit dein Vorhaben realisiert werden? Denn wenn du diese Technik benutzt, kannst du einträge seht einfach swischen Listen und ListViews hin und herschieben und auch in SharedPreferences oder einer DB dauerhaft speichern.

Wenn dem nicht so ist, dann beschreibe bitte genauer was deine "Liste" darstellt evtl. mit Screenshot etc...

LG Pascal //It's not a bug, it's a feature. :) ;)

Genetix x

Antworten
  • Forum-Beiträge: 59

18.06.2017, 22:37:34 via Website

Wenn ich den ListView anwenden will muss ich dann alles neu machen oder kann ich die Daten von den Buttons verwenden und damit weiterarbeiten?

Antworten
Pascal P.
  • Mod
  • Blogger
  • Forum-Beiträge: 10.169

18.06.2017, 22:40:39 via Website

Ich weiß nicht wie deine jetzige Struktur aussieht, aber ich vermute dass du zumindest diesen neu machen musst.
Früher oder später fliegst du damit auf die Nase...

LG Pascal //It's not a bug, it's a feature. :) ;)

Genetix x

Antworten
  • Forum-Beiträge: 59

18.06.2017, 22:43:23 via Website

Bis Jetzt sieht es so aus das das ganze aus Buttons besteht die in einem LinearLayout vertikal aufgereiht sind und beim draufklicken nach rechts raus "sliden" und dabei wird der Begriff der dort drauf steht in einem TextView gespeichert. Würde ungern das alles über den Haufen werfen war doch viel Arbeit bei ca 100 Buttons.

Antworten
Pascal P.
  • Mod
  • Blogger
  • Forum-Beiträge: 10.169

18.06.2017, 22:48:00 via Website

Eben, deswegen eine wichtige Regel beim Programmieren:
Erst das Konzept, wenn man das mit Grundlagen kombiniert, wird schnell klar, dass so eine "hardcoded" Struktur zu nix führt.
Mit flexiblen Listek kommt man da wesentlich schneller hin.

und für das neue Konzept bräuchtest du lediglich ein Array/ArrayList mit allen Strings/Namen und ein XML Layout auf dem sich die ListView befindet.
Du musst ja jetzt dein ButtonLayout nicht gleicht löschen, aber du kannst dir die ListView pparalell alternativ bauen und du wirst sehen dass es einfacher ist und auch übersichtlicher im Layout und im Code.

LG Pascal //It's not a bug, it's a feature. :) ;)

Genetix x

Antworten
  • Forum-Beiträge: 59

18.06.2017, 22:50:25 via Website

Wird es dann noch möglich sein das man auf die einzelnen Begriffe klickt und diese dann verschwinden?

Antworten
Pascal P.
  • Mod
  • Blogger
  • Forum-Beiträge: 10.169

18.06.2017, 22:52:45 via Website

Ja es sieht dann von Layout in einer ListView nicht mehr aus wie ein Button, aber das verschwinden ist möglich.

Ist für alle Einträge mit 2-3 Codezeilen zu realisieren, nicht so wie jetzt ;)

LG Pascal //It's not a bug, it's a feature. :) ;)

Genetix x

Antworten
  • Forum-Beiträge: 59

19.06.2017, 00:21:43 via Website

Würde das ganze theoretisch auch mit den Buttons gehen oder kann die ListView durch die Button repräsentiert werden?

Die Listview sieht nicht so aus wie es aussehen sollte.

Antworten
Pascal P.
  • Mod
  • Blogger
  • Forum-Beiträge: 10.169

19.06.2017, 08:03:28 via App

Wenn es Wirklichkeit cu Buttons sein sollen was ich dir nicht empfehlen kann, dann legst du diese aber auch dynamisch an. D.h du hast deine ArrayList und iteriert da durch. Für jeden Eintrag erstellst du dann einen Button mit entsprechendem Text und Listener.

LG Pascal //It's not a bug, it's a feature. :) ;)

Genetix x

Antworten
  • Forum-Beiträge: 59

19.06.2017, 13:06:21 via Website

Ich denke ich bekomm es doch mit der ListView hin. Wie schaff ich es denn die einzelnen Einträge mit einer Animation zu versehen?

Antworten
  • Forum-Beiträge: 2.902

19.06.2017, 13:08:39 via Website

Hallo Georg,

eines nach dem Anderen :-)
Animation und der Schröt kommt immer ganz zum Schluss , wenn man die Materie inne hat :-)

Animation innerhalb eines Listview ist recht tricky .....

Liebe Grüße - Stefan
[ App - Entwicklung ]

Genetix xPascal P.

Antworten
  • Forum-Beiträge: 59

19.06.2017, 13:13:56 via Website

Hallo Stefan,

genau das ist das Problem. Die einzelnen Einträge sollen ja beim drauf klicken verschwinden und eben in der anderen Listview wieder auftauchen :?

Ist das denn überhaupt möglich?

Antworten
  • Forum-Beiträge: 2.902

19.06.2017, 13:16:52 via Website

Ja das ist möglich.

Dazu benötigst du erst einmal einen CustomAdapter für den ListView /RecycleView
(Ich würde eh einen RecycleView nehmen)

Und in diesem reagierst du z.b. beim Click auf das Item

Es gibt mehrere Beispiele im Netz - z.b.
https://www.survivingwithandroid.com/2013/04/android-listview-animation-2.html

Und was das Verschwinden angeht - Einfach danach das element rauslöschen

— geändert am 19.06.2017, 13:25:08

Liebe Grüße - Stefan
[ App - Entwicklung ]

Genetix xPascal P.

Antworten
  • Forum-Beiträge: 59

19.06.2017, 16:18:06 via Website

Hab mir jetzt die Seite komplett durchgelesen allerdings schaff ich es nicht den Code mit meiner ListView zu verbinden.
Speziell geht es im Moment um den Code:

RecipeAdapter adapter = new RecipeAdapter(this, recipeList);
mListView.setAdapter(adapter);
final Context context = this;
mListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView parent, View view, int position, long id) {
// 1
Recipe selectedRecipe = recipeList.get(position);
// 2
Intent detailIntent = new Intent(context, RecipeDetailActivity.class);
// 3
detailIntent.putExtra("title", selectedRecipe.title);
detailIntent.putExtra("url", selectedRecipe.instructionUrl);
// 4
startActivity(detailIntent);
}
});
}
private ListView mListView;
}

und den das laden der Animation:

// Load animation
final < a class="zem_slink" href="http://en.wikipedia.org/wiki/Animation" title="Animation" rel="wikipedia" target="_blank">Animation anim = AnimationUtils.loadAnimation(this, R.anim.fade_anim);

Er unterstreicht vorallem "a class" wobei ich das "a" auch mit "adapter" ersetzt wird was auch nichts geholfen hat. Und ansonsten "href", "anim", "titel", "rel", "target".

— geändert am 19.06.2017, 16:20:41

Antworten
Pascal P.
  • Mod
  • Blogger
  • Forum-Beiträge: 10.169

19.06.2017, 16:23:50 via Website

Naja die HTML des Tuts ist wohl nicht sauber aufgebaut.

Du musste den Code dann schon bereinigen:
Nach: https://developer.android.com/reference/android/view/animation/AnimationUtils.html#loadLayoutAnimation(android.content.Context,%20int)

final Animation anim = AnimationUtils.loadAnimation(this, R.anim.fade_anim);

und dann kannstdu so weiter verfaren wie im Tut auch.

— geändert am 19.06.2017, 16:24:39

LG Pascal //It's not a bug, it's a feature. :) ;)

Genetix xswa00

Antworten
  • Forum-Beiträge: 59

19.06.2017, 16:52:32 via Website

Bei dem Code gibt er mir den "Unknown Class" Fehler bei "Animation"

Antworten
Pascal P.
  • Mod
  • Blogger
  • Forum-Beiträge: 10.169

19.06.2017, 16:56:22 via Website

Da wird der Import fehlen. Drücke mal alt und klicke dann auf "Animation", dann auf "Import class"

LG Pascal //It's not a bug, it's a feature. :) ;)

Genetix x

Antworten

Empfohlene Artikel