Methode fürs Verlinken von Variablen mit IDs?

N

no1Ltan

Fortgeschrittenes Mitglied
Threadstarter
Hallo,

bisher habe ich es in meinen Programmcodes so gestaltet, dass ich einer Variable eine ID zugewiesen habe,
als dieser auch eine Funktion zuweisen wollte.
Z.B.:
Code:
   Button buttonSilver = findViewById(R.id.button_silver);
   buttonSilver.setOnClickListener(new View.OnClickListener()
   {
       @Override
       public void onClick(View v)
       {
           setColor(getResources().getColor(R.color.silver), getResources().getColor(R.color.black)); // Load setColor method and send 2 color values
       }
   });
Allerdings ist es für mich einfacher und schneller, den Variablen die IDs als Liste zuzuweisen, da ich dafür Excel und AutoHotkey nutzen kann.
z.B.
Code:
   Button buttonWhite = findViewById(R.id.button_white);
   Button buttonSilver = findViewById(R.id.button_silver);
   Button buttonYellow = findViewById(R.id.button_yellow);
   Button buttonOrange = findViewById(R.id.button_orange);
   Button buttonRed = findViewById(R.id.button_red);
   Button buttonPink = findViewById(R.id.button_pink);
Der Nachteil dieser Arbeitsweise ist jedoch, dass ich beim Öffnen des Programmcodes immer regelrecht erschlagen werde,
da am Anfang nur IDs zu sehen sind.

Daher hatte ich 2 Ideen:
1) Zeilen ausblenden
Hat nicht geklappt, da Android Studio immer die kompletten Methoden ausblendet.
Befinde ich mich - wie in diesem Fall - in der onCreate-Methode, werden auch wichtige Zeilen ausgeblendet

2) Extra Methode für das Zuweisen der Variablen/IDs anlegen
Also das hier hat auf jeden Fall schon mal NICHT geklappt:
Code:
import android.app.Activity;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;

public class Page_4_Colors extends Activity
{
    int pos;
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.page4_colors);
        linkIds(); // Link variables and Ids

        buttonWhite.setOnClickListener(new View.OnClickListener()
        {
            @Override
            public void onClick(View v)
            {
                setColor(getResources().getColor(R.color.white), getResources().getColor(R.color.black)); // Load setColor method and send 2 color values
            }
        });
        buttonSilver.setOnClickListener(new View.OnClickListener()
        {
            @Override
            public void onClick(View v)
            {
                setColor(getResources().getColor(R.color.silver), getResources().getColor(R.color.black)); // Load setColor method and send 2 color values
            }
        });
    }
    public void setColor (int backgroundColor, int textColor) // Write color values into SharedPreferences
    {
        SharedPreferences prefs = getSharedPreferences("MY_SHARED_PREF", MODE_MULTI_PROCESS); // Create new SharedPreferences instance
        SharedPreferences.Editor editor = prefs.edit(); // Assign variable to editor function
        if (pos == 1)
        {
            editor.putInt("backgroundColorLeft", backgroundColor); // Write background color (int) inside of editor
            editor.putInt("textColorLeft", textColor); // Write text color (int) inside of editor
        }
        if (pos == 2)
        {
            editor.putInt("backgroundColorRight", backgroundColor); // Write background color (int) inside of editor
            editor.putInt("textColorRight", textColor); // Write text color (int) inside of editor
        }
        editor.apply(); // Save values, close process
        this.finish(); // Close this activity
    }
    protected void linkIds() // Link variables and Ids
    {
        Button buttonWhite = findViewById(R.id.button_white);
        Button buttonSilver = findViewById(R.id.button_silver);
        Button buttonYellow = findViewById(R.id.button_yellow);
        Button buttonOrange = findViewById(R.id.button_orange);
        Button buttonRed = findViewById(R.id.button_red);
        Button buttonPink = findViewById(R.id.button_pink);
    }
}
Habt ihr eine Idee, wie sich das Lösen lässt?
Klar ist es kein großes Problem, aber speziell bei Anfängern wie mir ist weniger Programmcode
auch weniger verwirrend.
Da kann man sich auf das wesentliche konzentrieren statt ständig X IDs überfliegen zu müssen.

Grüße
 
J

jogimuc

Erfahrenes Mitglied
Hi
Das kann leider nicht gehen . Denn die in der Methode linkIds() erstellten Variablen sind lokal die sind nur innerhalb der Methode verfügbar. Dafür müsstest du Klassenvariablen (global) im Klassenrupf benutzen.

Schaue dir das mit den Gültigkeiten von Variablen in Java noch mal an.
 
Zuletzt bearbeitet:
N

no1Ltan

Fortgeschrittenes Mitglied
Threadstarter
Hi,
Ok, danke für die Info!
Habe es mittels Zeilen ausblenden hinbekommen.

Zeilen markieren -> Rechtsklick -> Folding -> Fold selection / Remove region.

Grüße
 
J

jogimuc

Erfahrenes Mitglied
Hi wenn du etwas mehr Ordnung und Stuckatur in deinen Code bekommen willst ist dieses Beispiel. vielleicht was für dich.


Code:
public class MainActivity extends AppCompatActivity implements View.OnClickListener  {
   

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
           
        ((Button)this.findViewById(R.id.button1)).setOnClickListener(this);
        ((Button)this.findViewById(R.id.button2)).setOnClickListener(this);
       // Beispiel 2
        ((Button)this.findViewById(R.id.ButtonStart)).setOnClickListener(new   click());  // wenn du es in einer eigenen Klasse haben willst
    }


    @Override
    public void onClick(View v) {
            
        switch (v.getId()){
            case R.id.button1 :
                // dein Code für Button 1
                break;

            case  R.id.button2 :
               // dein Code für Button 2
                break;
         
        } 
   }

// innere Klasse wird nur benötigt für Bespiel 2, so hast du wieder für jeden Button einene eigene onClick Methode.

  class click implements View.OnClickListener {
      @Override
      public void onClick(View v) {
      }
   }


}
 
Zuletzt bearbeitet:
Oben Unten