Robert Li
Robert Li

Reputation: 107

Android: How to declare global objects (textviews, buttons) and modify them with functions

I am able to create a global object like a button or textview but I am not able to use them in my functions.

I'd like to create a global textview or edittext view where I will be able to read and modify its contents with my functions.

This is an example, I created a textview under onCreate called "titles"

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

        TextView titles = (TextView)findViewById(R.id.textView);

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

Later in the same activity, I have a function that tries to modify its text, instead I get an error saying cannot resolve.

public void win(){

titles.setText("Second text to display!");

}

Upvotes: 0

Views: 1977

Answers (3)

Rohit Sharma
Rohit Sharma

Reputation: 2017

Declare your variables at class level outside the onCreate:

 public class MainActivity extends AppCompatActivity {

        TextView titles;
 @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);
        titles = (TextView)findViewById(R.id.textView);

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

Upvotes: 1

Eslam El-Meniawy
Eslam El-Meniawy

Reputation: 105

You need to define TextView outside onCreate to be able to access it from other functions.

public class MainActivity extends AppCompatActivity {
TextView titles;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);

    titles = (TextView)findViewById(R.id.textView);

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

Then use it from other functions and it will work

public void win(){

    titles.setText("Second text to display!");

}

Upvotes: 0

Vaisakh N
Vaisakh N

Reputation: 790

    public class MainActivity extends AppCompatActivity {
    private TextView titles;
 @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
        setSupportActionBar(toolbar);

        titles = (TextView)findViewById(R.id.textView);

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

Upvotes: 0

Related Questions