Как получить доступ к переменным в отдельных функциях - Android - PullRequest
0 голосов
/ 12 февраля 2011

Я написал это маленькое приложение, и оно отлично работает.Но я новичок в Java и предполагаю, что должен быть лучший способ написать это, чтобы переменные можно было прочитать в обеих функциях.Есть ли?

package max.multiplebuttons.com;


import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import android.view.View.OnClickListener;

public class multibuttons extends Activity implements OnClickListener {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        TextView question = (TextView)findViewById(R.id.question);
        TextView textView = (TextView)findViewById(R.id.textView);
        Button answer1 = (Button)findViewById(R.id.answer1);
        Button answer2 = (Button)findViewById(R.id.answer2);
        answer1.setText("button1");
        answer2.setText("button2");
        question.setText("click a button");
        textView.setText("Some Text");
        answer1.setOnClickListener(this);
        answer2.setOnClickListener(this);
    }
    public void onClick(View v){
        TextView textView = (TextView)findViewById(R.id.textView);
        Button answer1 = (Button)findViewById(R.id.answer1);
        Button answer2 = (Button)findViewById(R.id.answer2);
        if(v==answer1){
            textView.setText("1");
        }
        if(v==answer2){
            textView.setText("2");
        }
    }
}

1 Ответ

7 голосов
/ 12 февраля 2011

Сделайте их переменными, которые принадлежат классу, объявив их вне любого метода, но внутри класса:

public class multibuttons extends Activity implements OnClickListener {
TextView question;
TextView textview;
//etc.

}

Тогда вам просто нужно инициализировать их внутри метода onCreate:

public void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    question = (TextView)findViewById(R.id.question);
    textView = (TextView)findViewById(R.id.textView);
    //...

Вам вообще не нужно инициализировать их в методе onClick:

public void onClick(View v){
    if(v==answer1){
        textView.setText("1");
    }
    if(v==answer2){
        textView.setText("2");
    }
}

Переменные, объявленные внутри метода (или любой блок операторов, заключенный в фигурные скобки, такие как {}), имеют только область видимости (то есть они видны только внутри этого метода / блока.Переменные, объявленные как переменные класса, могут иметь открытую, закрытую, защищенную область или область по умолчанию / пакет.Объявите их как общедоступные, чтобы иметь доступ к ним в любом другом классе.

...