Android: View Elemente mit Namen suchen
Wie findet man in einer Android App Anzeigelemente wie
Buttons durch den Namen?
Lösung:
Hierzu verwendet man View.findViewById("name_des_Element")
In Android gibt es die Zuweisung von ID und Tag auf eine
View Element zur Laufzeit.
Wenn man aber zur Laufzeit dann ein dynamisch erstelltes Element
wie Texteingabe EditView oder einen Button sucht, dann kann man in der Regel mit
der laufenden ID Nummer nichts anfangen.
Deshalb sucht man oft nach dem Namen wie "Button_Raimund"
oder "Input_2018_10_01".
Hierzu verwendet man getViewbyTag
Man kann findViewWithTag nur auf Views anwenden. Deshalb sucht
man erst das Layout der Seite
final LinearLayout root_Panel=
findViewById(R.id.root_Layout);
|
Dann weden zur Laufzeit Elemente erstellt welche man ein Tag
zuweist.
wie hier Buttons
Button
button1=new
Button(this);
button1.setText("1: YELLOW");
button1.setTag("Button1"); //*=name
|
Später kann man das View-Element suchen und wie ein Objekt
zur Laufzeit auswerten oder verändern.
Button
btn = root_Panel.findViewWithTag("Button2");
String sCaption=btn.getText().toString();
|
Beispiel
Button 2 sucht Button 1 und wertet die Überschrift aus.
package com.codedocu.myapplication;
import
android.app.AlertDialog;
import
android.graphics.Color;
import
android.support.v7.app.AppCompatActivity;
import
android.os.Bundle;
import
android.view.View;
import
android.widget.Button;
import
android.widget.LinearLayout;
import
android.widget.RelativeLayout;
public
class MainActivity
extends
AppCompatActivity {
//----------------------<
Activity >----------------------
@Override
protected void onCreate(Bundle
savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
create_Buttons();
}
public void create_Buttons()
{
//------------<
create_Buttons() >------------
//< get_Layout >
final LinearLayout
root_Panel= findViewById(R.id.root_Layout);
//< get_Layout >
//--< Element1 >--
Button button1=new Button(this);
button1.setText("1: YELLOW");
button1.setTag("Button1"); //*=name
button1.setBackgroundColor(Color.YELLOW);
button1.setOnClickListener(on_Button_clicked);
//< add >
root_Panel.addView(button1);
//</ add >
//--</ Element1 >--
//--< Element2 >--
//*Inline-Event
Button button2=new Button(this);
button2.setText("2: RED");
button2.setTag("Button2");
button2.setBackgroundColor(Color.RED);
button2.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View v) {
Button btn = root_Panel.findViewWithTag("Button1");
String
sCaption=btn.getText().toString();
show_Messagebox("2->1 found
=" +
sCaption , "inline-Event
Button2");
}
});
//< add >
root_Panel.addView(button2);
//</ add >
//--</ Element1 >--
//------------</
create_Buttons() >------------
}
//===================<
region: events >===================
View.OnClickListener on_Button_clicked = new View.OnClickListener()
{
public void onClick(View v) {
final LinearLayout
root_Panel= findViewById(R.id.root_Layout);
Button btn = root_Panel.findViewWithTag("Button2");
String
sCaption=btn.getText().toString();
show_Messagebox("1->2 found
button2:=" + sCaption , "onButton1_click");
}
};
//===================</
region: events >===================
//============< region: system
>==============
public void show_Messagebox(CharSequence Message_Text, CharSequence Title) {
//--------------<
fp_Messagebox() >----------------
//< Message erstellen >
AlertDialog.Builder
msg = new
AlertDialog.Builder(this);
msg.setTitle(Title);
msg.setMessage(Message_Text);
msg.setCancelable(true);
//</ Message
erstellen >
//< anzeigen >
AlertDialog msgDialog
= msg.create();
msgDialog.show();
//</ anzeigen >
//--------------</
fp_Messagebox() >----------------
}
//=============</
region: system >=============
//===================</ Activity
>======================
}
|
Activity_Main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/root_Layout"
android:layout_height="match_parent"
android:layout_width="match_parent"
android:orientation="vertical"
>
</LinearLayout>
|