2016-05-23 4 views
3

Ich versuche einen Android-Code zu erstellen, der für jede Schaltfläche eine andere Arbeit bereitstellt.TEXTVIEW Substantiation location

so, wenn der Benutzer Druck auf Button1 ein Textview Feld bietet

„Sie auf Button1 gedrückt“

meine Frage bezieht sich auf die richtige Stelle, die ich nur einmal Textview instanziiert kann als der einzige Arbeitsplatz innerhalb der Funktion Button1 ist .

Java-Code für eine einzige Taste:

public void Button1(View view) { 
     final TextView textView=(TextView)findViewById(R.id.textView2); 
     textView.setText("You clicked the button 1"); 

    } 

gesamten Java-Code

public class MainActivity extends AppCompatActivity { 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
     setSupportActionBar(toolbar); 
     FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab); 
     fab.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View view) { 
       Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG) 
         .setAction("Action", null).show(); 
      } 
     }); 


    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.menu_main, menu); 
     return true; 
    } 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     // Handle action bar item clicks here. The action bar will 
     // automatically handle clicks on the Home/Up button, so long 
     // as you specify a parent activity in AndroidManifest.xml. 
     int id = item.getItemId(); 

     //noinspection SimplifiableIfStatement 
     if (id == R.id.action_settings) { 
      return true; 
     } 

     return super.onOptionsItemSelected(item); 
    } 

    public void Button1(View view) { 
     final TextView textView=(TextView)findViewById(R.id.textView2); 
     textView.setText("You clicked the button 1"); 

    } 
    public void Button2(View view) { 
     final TextView textView=(TextView)findViewById(R.id.textView2); 

     textView.setText("You clicked the button 2"); 
    } 
    public void Button3(View view) { 
     final TextView textView=(TextView)findViewById(R.id.textView2); 

     textView.setText("You clicked the button 3"); 
    } 
    public void Button4(View view) { 
     final TextView textView=(TextView)findViewById(R.id.textView2); 

     textView.setText("You clicked the button 4"); 

    } 
    public void Button5(View view) { 
     final TextView textView=(TextView)findViewById(R.id.textView2); 

     textView.setText("You clicked the button 5"); 
    } 
    public void Button6(View view) { 
     final TextView textView=(TextView)findViewById(R.id.textView2); 

     textView.setText("You clicked the button 6"); 
    } 
} 

Gesamt XML-Code

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:app="http://schemas.android.com/apk/res-auto" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:id="@+id/RelativeLayoutID" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:paddingBottom="@dimen/activity_vertical_margin" 
    android:paddingLeft="@dimen/activity_horizontal_margin" 
    android:paddingRight="@dimen/activity_horizontal_margin" 
    android:paddingTop="@dimen/activity_vertical_margin" 
    app:layout_behavior="@string/appbar_scrolling_view_behavior" 
    tools:context="com.example.sherifsaleh.xmllayout.MainActivity" 
    tools:showIn="@layout/activity_main" 
    > 

    <Button 
     android:id="@+id/button3" 
     android:onClick="Button3" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="3" 
     android:layout_above="@+id/button6" 
     android:layout_alignLeft="@+id/button6" 
     android:layout_alignStart="@+id/button6" /> 

    <Button 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:onClick="Button6" 
     android:text="6" 
     android:id="@+id/button6" 
     android:layout_below="@+id/button2" 
     android:layout_alignLeft="@+id/button9" 
     android:layout_alignStart="@+id/button9" /> 

    <Button 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="9" 
     android:id="@+id/button9" 
     android:onClick="Button9" 
     android:layout_alignTop="@+id/button8" 
     android:layout_toRightOf="@+id/button8" 
     android:layout_toEndOf="@+id/button8" /> 

    <Button 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="8" 
     android:id="@+id/button8" 
     android:layout_below="@+id/button5" 
     android:layout_toRightOf="@+id/button4" 
     android:layout_toEndOf="@+id/button4" 
     android:onClick="Button8"/> 

    <Button 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="2" 
     android:onClick="Button2" 
     android:id="@+id/button2" 
     android:layout_above="@+id/button5" 
     android:layout_toRightOf="@+id/button1" 
     android:layout_toEndOf="@+id/button1" /> 

    <Button 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:onClick="Button5" 
     android:text="5" 
     android:id="@+id/button5" 
     android:layout_below="@+id/button1" 
     android:layout_toRightOf="@+id/button1" 
     android:layout_toEndOf="@+id/button1" /> 

    <Button 
     android:id="@+id/button1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="1" 
     android:onClick="Button1" 
     android:layout_above="@+id/button4" 
     android:layout_alignLeft="@+id/button4" 
     android:layout_alignStart="@+id/button4" /> 

    <Button 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="4" 
     android:id="@+id/button4" 
     android:layout_above="@+id/button7" 
     android:layout_alignLeft="@+id/button7" 
     android:layout_alignStart="@+id/button7" /> 

    <Button 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="7" 
     android:id="@+id/button7" 
     android:layout_alignParentBottom="true" 
     android:layout_alignLeft="@+id/textView2" 
     android:layout_alignStart="@+id/textView2" 
     android:layout_marginBottom="90dp" /> 

    <TextView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:textIsSelectable="true" 
     android:text="New Text" 
     android:id="@+id/textView2" 
     android:layout_alignParentTop="true" 
     android:layout_centerHorizontal="true" 
     android:layout_marginTop="80dp" 
     android:textSize="50dp"/> 
</RelativeLayout> 
+2

deklarieren Sie es als Klassenmitglied und führen Sie die Initialisierung in 'onCreate.' Es wird einmal während des Lebenszyklus der Aktivität aufgerufen. – Raghunandan

+0

@sherif - vergessen Sie nicht, eine Antwort zu akzeptieren. Somias Antwort ist die vollständigste. – JohnnyLambada

Antwort

1

nicht super sicher, was Ihre Frage ist. Wenn Sie fragen, ob es akzeptabel ist, Ihre findViewById in der Schaltfläche Listener zu tun, ist es akzeptabel, aber nicht optional. Jedes Mal, wenn Sie die Taste drücken, wird der Code ausgeführt. Es ist besser, es einmal

1

einfach erklärt es in onCreate zu tun zu Beginn Ihrer Aktivität

public class MainActivity extends AppCompatActivity { 
     private TextView textView2; 
     ..... 

    protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_layout); 

    textView2 = (TextView) findViewById(R.id.textView2);} 
    ..... 
    public void Button6(View view) { 

    textView2.setText("bla"); 
} 

Ist das, was Sie gefragt?

+0

Wie geschrieben, wird dies nicht funktionieren. 'setContentView' _must_ muss auftreten, bevor' findViewById' funktionieren wird. Daher wird 'findViewById' aufgerufen, während 'MainActivity' erstellt wird. – JohnnyLambada

+0

Sie haben Recht, jetzt bearbeitet –

4

Versuchen Sie so.

public class MainActivity extends AppCompatActivity { 

private TextView textView; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    textView = (TextView)findViewById(R.id.textView2); 
    .... 
} 

Und Ihre Button-Klick-Methode als

public void Button1(View view) { 
    textView.setText("You clicked the button 1"); 
} 
1

1) Versuchen Sie zuerst Ihre Referenzen in onCreate zu initialisieren, welche once.So Verweise auf Ihre Ansichten nur einmal EG-

@Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     btnOne = (Button) findViewById(R.id.btnOne); 
     btnTwo = (Button) findViewById(R.id.btnTwo); 
     textView = (TextView) findViewById(R.id.textView); 

     btnOne.setOnClickListener(this); 
     btnTwo.setOnClickListener(this); 
} 
wird initialisiert lädt

2) Anstatt separate Methoden für jede Schaltfläche aufzurufen, klicken Sie auf Listener wie oben erwähnt

and implement View.OnClickListener and then 

3) außer Kraft setzt Methode

@Override 
    public void onClick(View v) { 
     Button b = (Button)v; 
     String buttonText = b.getText().toString(); 
     textView.setText("You clicked on " + buttonText); 

    } 

So ist der Code in onClick wird in Ihrem Fall zu wiederholen, anstatt jedes Mal zu schreiben seperat es einmal schreiben und Text oder Sie können Tag der Taste eingestellt und bekommen es (wenn Sie einen anderen Wert als Texttext anstelle von Schaltflächentext eingeben möchten und auf Textview setzen, wie ich es in onClick getan habe. Es wird Ihre Bemühungen reduzieren und erhöhen Sie Ihre Code-Wiederverwendbarkeit und Redierbarkeit auch .. !!!!!