2016-05-23 44 views
3

我想为每个按钮提供一个不同的工作的android代码。TEXTVIEW证明位置

所以当上Button1的用户按下一个TextView字段提供“你压在Button1的”

我的问题是关于我可以实例TextView的ONLY ONCE作为唯一的工作地点是Button1的函数中的正确位置。

Java代码的单一按钮:

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

    } 

总java代码

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"); 
    } 
} 

总XML代码

<?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

将其声明为类成员,并在'onCreate.'中进行初始化,在活动的生命周期中调用它。 – Raghunandan

+0

@sherif - 别忘了接受答案。索米亚的答案是最完整的。 – JohnnyLambada

回答

1

不是超级确保你的问题是什么。如果你问是否可以在按钮侦听器中执行findViewById,那么这是可以接受的,但不是可选的。每次按下按钮代码都会运行。这是更好地在的onCreate

1

一旦做到这一点只需在活动

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"); 
} 

开始宣称它是你问什么?

+0

正如所写,这实际上不会工作。 'setContentView' _must_发生在'findViewById'工作之前,因此在创建MainActivity时调用'findViewById'将失败。 – JohnnyLambada

+0

你说得对,现在编辑 –

4

试试这个。

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); 
    .... 
} 

而且您的按钮点击方法

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

1)首先尝试初始化中的onCreate您参考,加载once.So引用您的意见将初始化一次 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); 
} 

2)而不是调用每个按钮的独立方法应用点击上述按钮上的听众

and implement View.OnClickListener and then 

3)覆盖方法

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

    } 

所以的onClick的代码,你的情况是重复的,而不是每次都写seperately编写一次,并获得文本,也可以设置按钮的标签,并把它(如果你想设置另一个值textview而不是按钮文本),并设置为textview,就像我在onClick中所做的那样。 它会减少你的努力,并增加你的代码的可重用性和可重用性。