0

I am trying to make an app that has multiple layouts. Is there a certain efficient way to display multiple layouts? My app has buttons and each button leads to a different layout. Therefore, can anyone give me ideas on what to use? I am a 14 year old and i am completely new to android. I have a moderate amount of background in java, that's all. Thanks for any help! Here is my main activity...

package com.example.submenus;

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

public class MainActivity extends Activity {
    public void onBackPressed()  {
        setContentView(R.layout.activity_main);


    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main); 

        // This is for Audi A4
        Button button = (Button) findViewById(R.id.a4button);
    button.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {
            setContentView(R.layout.audi);
            }

        }   ); 

        // This is for Audi A6
        Button button1 = (Button) findViewById(R.id.a6button);
    button1.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {
            setContentView(R.layout.audia6);
             }

        } ); 

        // This is for Audi Q5
         Button button2 = (Button) findViewById(R.id.q5button);
    button2.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {
            setContentView(R.layout.audiq5);

            }
    } ); 

        // This is for Audi R8
         Button button3 = (Button) findViewById(R.id.r8button);
    button3.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {
            setContentView(R.layout.audir8);

        }
    } );


    }
}

Again, just want to say this is an app that has a main menu. In that menu i have multiple buttons that lead to a different layout correspondingly. The app works fine until i hit the back button then click a button. Let me rephrase that... I click on a button and it takes me to the correct layout. I then can hit the back button and it brings the layout back to the main menu just like it should. Then if i click another button the app freezes and crashes. Is there a way to fix this? Thanks for any help!

Steve Sahayadarlin
  • 1,164
  • 3
  • 15
  • 32
  • [you asked the same question 2 days ago](http://stackoverflow.com/questions/20060715/when-i-use-the-back-button-in-activity-my-app-crashes-after-i-click-a-button-in) where they told you using setContentView() multiple times wouldn't work. – panini Nov 21 '13 at 01:22
  • And the error is `NullPointerException`? You need to reassign `(Button) findViewById(BUTTON_ID)` and `OnClickListener` to `button`-`button3` – Aprian Nov 21 '13 at 01:31
  • And why don't you just create 4 more activities? Or using [Fragment](http://developer.android.com/guide/components/fragments.html) to achieve what you want. – Aprian Nov 21 '13 at 01:33
  • Aprian, what do you mean by reassign? – Steve Sahayadarlin Nov 21 '13 at 01:35

2 Answers2

0

This should fix your error, but I think this is a very bad approach.

public class MainActivity extends Activity {
    public void onBackPressed()  {
        // You need to re-findView and re-setOnClickListener to button-button3
        setMain();
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setMain();
    }

    public void setMain() {
        setContentView(R.layout.activity_main); 

        // This is for Audi A4
        Button button = (Button) findViewById(R.id.a4button);
        button.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
                setContentView(R.layout.audi);
            }
        }); 

        // This is for Audi A6
        Button button1 = (Button) findViewById(R.id.a6button);
        button1.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
                setContentView(R.layout.audia6);
            }
        });

        // This is for Audi Q5
        Button button2 = (Button) findViewById(R.id.q5button);
        button2.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
                setContentView(R.layout.audiq5);
            }
        }); 

        // This is for Audi R8
        Button button3 = (Button) findViewById(R.id.r8button);
        button3.setOnClickListener(new View.OnClickListener() {
            public void onClick(View v) {
                setContentView(R.layout.audir8);
            }
        });
    }
}

You can create many activities, so what to do?

  1. Create another class that extends Activity

    public class ChildActivity extends Activity {
    
        @Override
        public void onCreate(Bundle savedInstanceState) {
            // Create another child.xml in your res > layout
            setContentView(R.layout.child);
        }
    }
    
  2. Register the activity under application tag in your AndroidManifest.xml

    <activity name=".ChildActivity"/>
    
  3. Call ChildActivity from your MainActivity

    // This is for Audi A4
    Button button = (Button) findViewById(R.id.a4button);
    button.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {
            Intent childIntent = new Intent(MainActivity.this, ChildActivity.class);
            startActivity(childIntent); 
        }
    });
    

And that's it. I hope I didn't leave out anything.

NOTE

If you are going to use activity approach. You should remove the onBackPressed method in your MainActivity.

Aprian
  • 1,718
  • 1
  • 14
  • 24
  • Apria thank you very much for all of this but I just watched a tutorial on YouTube and decided i am going to use multiple activities which actually works! – Steve Sahayadarlin Nov 21 '13 at 01:57
0
// try this way
**main.xml**
<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:padding="5dp"
        android:gravity="center"
        android:orientation="vertical" >

        <LinearLayout
            android:id="@+id/lnrButton"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="vertical">
            <Button
                android:id="@+id/btnAudi4"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:text="Audi4"/>

            <Button
                android:id="@+id/btnAudi6"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:text="Audi6"/>

            <Button
                android:id="@+id/btnAudiQ5"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:text="AudiQ5"/>

            <Button
                android:id="@+id/btnAudiR8"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:text="AudiR8"/>

        </LinearLayout>

        <LinearLayout
            android:id="@+id/lnrAudi4"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:visibility="gone"
            android:orientation="vertical">

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="Audi4"/>

            <!--Write Audi4 layout shwon code here-->
        </LinearLayout>

        <LinearLayout
            android:id="@+id/lnrAudi6"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:visibility="gone"
            android:orientation="vertical">
            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="Audi6"/>

            <!--Write Audi6 layout shwon code here-->
        </LinearLayout>

        <LinearLayout
            android:id="@+id/lnrAudiQ5"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:visibility="gone"
            android:orientation="vertical">
            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="AudiQ5"/>

            <!--Write AudiQ5 layout shwon code here-->
        </LinearLayout>

        <LinearLayout
            android:id="@+id/lnrAudiR8"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:visibility="gone"
            android:orientation="vertical">

            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="AudiR8"/>

            <!--Write AudiR8 layout shwon code here-->
        </LinearLayout>

    </LinearLayout>
</ScrollView>

**MainActivity**
public class MyActivity extends Activity {

    private Button btnAudi4;
    private Button btnAudi6;
    private Button btnAudiQ5;
    private Button btnAudiR8;

    private LinearLayout lnrButton;
    private LinearLayout lnrAudi4;
    private LinearLayout lnrAudi6;
    private LinearLayout lnrAudiQ5;
    private LinearLayout lnrAudiR8;

    @Override
    protected void onCreate(Bundle savedInstanceState){
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        lnrButton = (LinearLayout) findViewById(R.id.lnrButton);
        lnrAudi4 = (LinearLayout) findViewById(R.id.lnrAudi4);
        lnrAudi6 = (LinearLayout) findViewById(R.id.lnrAudi6);
        lnrAudiQ5 = (LinearLayout) findViewById(R.id.lnrAudiQ5);
        lnrAudiR8 = (LinearLayout) findViewById(R.id.lnrAudiR8);

        btnAudi4 = (Button) findViewById(R.id.btnAudi4);
        btnAudi6 = (Button) findViewById(R.id.btnAudi6);
        btnAudiQ5 = (Button) findViewById(R.id.btnAudiQ5);
        btnAudiR8 = (Button) findViewById(R.id.btnAudiR8);

        btnAudi4.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                lnrButton.setVisibility(View.GONE);
                lnrAudi4.setVisibility(View.VISIBLE);
            }
        });
        btnAudi6.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                lnrButton.setVisibility(View.GONE);
                lnrAudi6.setVisibility(View.VISIBLE);
            }
        });
        btnAudiQ5.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                lnrButton.setVisibility(View.GONE);
                lnrAudiQ5.setVisibility(View.VISIBLE);
            }
        });
        btnAudiR8.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                lnrButton.setVisibility(View.GONE);
                lnrAudiR8.setVisibility(View.VISIBLE);
            }
        });
    }

    @Override
    public void onBackPressed() {
        if(lnrButton.getVisibility()==View.GONE){
            lnrButton.setVisibility(View.VISIBLE);
            lnrAudi4.setVisibility(View.GONE);
            lnrAudi6.setVisibility(View.GONE);
            lnrAudiQ5.setVisibility(View.GONE);
            lnrAudiR8.setVisibility(View.GONE);
        }else{
            super.onBackPressed();
        }
    }
}
Haresh Chhelana
  • 24,720
  • 5
  • 57
  • 67