Problem mit variable.setText (für TextView)

N

no1Ltan

Fortgeschrittenes Mitglied
7
Hallo,

ich habe 2 TextViews, in denen jeweils noch 1 weitere TextView integriert ist.
Globale Variablen:
TextView textViewTop, textViewBottom // Clickable textViews
TextView textViewFeedbackTop, textViewFeedbackBottom // Visual feedback

Verlinkung der IDs in der @override public void onResume():
textViewTop = getActivity().findViewById(R.id.text_view_top); // Link variable to ID
textViewBottom = getActivity().findViewById(R.id.text_view_bottom); // Link variable to ID
textViewFeedbackTop = getActivity().findViewById(R.id.text_view_feedback_top); // Link variable to ID
textViewFeedbackBottom = getActivity().findViewById(R.id.text_view_feedback_bottom); // Link variable to ID


Wenn ich auf eine der beiden TextViews klicke, möchte ich einen Klick-Effekt haben.
Effekt 1: Die Textview soll sich kurzzeitig bewegen
Effekt 2: Es soll ein kurzzeitig ein Symbol erscheinen.

Die Effekte habe ich dank des ObjectAnimators, der mir von deek empfohlen wurde, umgesetzt.

Beim Aufrufen der Methoden (im OnClickListener der TextViews), sende ich den Namen der aktuellen TextView an die Methoden.
Das heißt, die Methoden wissen, welche View sie mit dem Effekt versorgen sollen.

Alles funktioniert super... bis auf eine Sache:
In der Feedback-Methode akzeptiert Java nicht die p.setText(""); bzw. p.setText("+");
("Cannot resolve method 'setText(java.lang.String)'")
Es funktioniert nur, wenn da der tatsächliche View-Name steht, also z.B.:
textViewTop.setText(""); textViewTop.setText("+");

Bei allen anderen Methoden gibt es keine Probleme wenn ich statt textViewTop bzw. textViewBottom einfach das p verwende.
Das p steht ja für den TextView-Namen.

Ich hatte dann versucht, mit if-Abfragen zu arbeiten, aber das war dann sogar noch schlechter (und funktionierte ebenfalls nicht).

Hier der Code (ohne if-Abfragen):
Code:
        textViewTop.setOnClickListener(new View.OnClickListener()
        {
            @Override public void onClick(View v)
            {
                feedback(textViewTop); // Show + icon
                moveEffect(textViewTop); // Start moving animation
            }
        });
        textViewBottom.setOnClickListener(new View.OnClickListener()
        {
            @Override public void onClick(View v)
            {               
                feedback(textViewBottom); // Show + icon
                moveEffect(textViewBottom); // Start moving animation
            }
        });

    public void feedback(final View p) // Visual feedback (for specific view object)
    {
        final Handler handler = new Handler();
        handler.postDelayed(new Runnable()
        {
            @Override
            public void run()
            {
                fadeEffect(p, 1.0f, 0.0f); // Fade-Out
                p.setText(""); // Remove +1 after 500 ms -> DOES NOT WORK!
            }
        }, 500); // 500 ms delay
        fadeEffect(p, 0.0f, 1.0f); // Fade-In
        p.setText("+"); // Add + character for 500 ms -> DOES NOT WORK!
    }
    public void moveEffect(View p) // Receive view - specific position
    {
        move = ObjectAnimator.ofFloat(p, "translationX", 20f, 0f); // Move view 20px to right, then back to 0
        move.setDuration(100); // 100 ms animation duration
        move.setRepeatCount(1); // Repeat animation 1 time
        move.start(); // Start animation!
    }
    public void fadeEffect(View p, float f1, float f2) // Receive view - specifiv position and float values (from f1 to f2)
    {
        fade = ObjectAnimator.ofFloat(p, View.ALPHA, f1, f2); // Either fade-In or fade-out
        fade.setDuration(300); // 300 ms animation duration
        fade.start(); // Start animation!
    }

Achso eine Kleinigkeit noch:
Kann ich z.B. statt feedback(textViewTop); auch sowas wie feedback(this); machen?
Praktisch, "Starte die Methode und schicke deinen eigenen Namen".
this funktioniert nicht, aber vielleicht gibt es ja eine andere Möglichkeit.

Danke für jede Hilfe!
 
no1Ltan schrieb:
Alles funktioniert super... bis auf eine Sache:
In der Feedback-Methode akzeptiert Java nicht die p.setText(""); bzw. p.setText("+");
("Cannot resolve method 'setText(java.lang.String)'")
Es funktioniert nur, wenn da der tatsächliche View-Name steht, also z.B.:
textViewTop.setText(""); textViewTop.setText("+");
p ist eine View. Die Funktion .setText("") ist nur bei TextViews vorhanden. Deshalb funktioniert textViewTop.setText("") nur mit textViewTop und nicht mit p.

So klappt es:
Code:
((TextView) p).setText("");
 
  • Danke
Reaktionen: no1Ltan
Ach man, so knapp!
Auf die Idee mit dem Casting bin ich auch schon gekommen.
Ich hatte es allerdings mit (TextView)p.setText("+"); probiert, was nicht geklappt hat.
Das ärgert mich jetzt schon etwas...

Es funktioniert nun und dafür danke ich dir vielmals!

Beste Grüße
 

Ähnliche Themen

netfreak
  • netfreak
Antworten
10
Aufrufe
461
netfreak
netfreak
S
Antworten
4
Aufrufe
995
Sempervivum
S
5
Antworten
0
Aufrufe
1.151
586920
5
Zurück
Oben Unten