Brandon
Brandon

Reputation: 1373

Switching Views/layouts

I have a problem that I can't seem to find the solution to.

I have an app that loads the main.xml file on startup, of course. In it are several buttons, and I want the buttons to take me to a different XML file. I just used setContentView(R.layout.newlayout.xml) method for that, and it works great.

The problem comes in after that. If I reference any of the buttons or other objects in the new layout, the app won't even finish loading before it errors out and closes on the emulator. However, if I take all references to objects out, the app runs fine.

I can navigate TO the new layouts, but their buttons can't do anything. Do I need to create a separate Java file for each layout? Or am I doing it all wrong? I'm trying to be as specific as I can. I suppose you could say I need to have different "pages" in my app as a website would.

Upvotes: 1

Views: 588

Answers (3)

Abhishek Susarla
Abhishek Susarla

Reputation: 578

The buttons and views only can refer to those mentioned in the current SetContentView() file..

u can test this by creating a button and initialising to an R.id... without setting the content view.. U will get a force close..

so if u change the XML file u shud initialise stuff again....

Upvotes: 1

Brandon
Brandon

Reputation: 1373

Ok, for anyone out there with the same problem and haven't figured out how to do it, as I said in my comment on ylebre, my Coworker and I have finally discovered how to do it. First off, we added

implements OnClickListener

to the class, after

extends Activity

then, we created a new java file, and at the beginning of the file it called

setContentView(R.layout.newlayout);

instead of main. Then, we made a button as follows:

Button button1 = (Button) findViewById(R.id.button01;
button1.setOnClickListener(this);

then later in the code:

public void onClick(View v) {
        switch(v.getId()) {
            case R.id.button01:
                startActivity(new Intent(this, NEWJAVAFILE.class));
                break;

        }
    }

And that's it! We just copied and pasted that code into NEWJAVAFILE, changed the names and such, and we were able to navigate freely back and forth. As ylebre said, all of the code for the new activity is in the NEWJAVAFILE.java. OH and don't forget to add the name of the java file to the manifest inside the tags:

<activity android:name=".NEWJAVAFILE">        
    </activity>

it all seems so simple now!

Upvotes: 0

ylebre
ylebre

Reputation: 3130

I think what you are trying to do is best solved using multiple java files, each one defining it's own android Activity.

While it is possible to have multiple layouts/views in a single activity, this will generally make the code more complex and harder to read/debug in the future. By having each 'screen' in its own file, it will be a bit easier to manage all the different views you need to juggle.

Upvotes: 1

Related Questions