Westporch
Westporch

Reputation: 817

changing activity on android


I've difficult with changing activity on android.
I started my app(display main.xml) and clicked Start button(display listening.xml).
When I had pressed back button, background disappeared on my app.

[display main.xml]
https://lh6.googleusercontent.com/-os0K4G27h7M/U_G7HBH82xI/AAAAAAAAAzQ/io8-S9zn4C8/s512/Main.png

[display listening.xml]
detecting display.. (A image not attached because I have less reputation :( )

[display main.xml (Problem)]
https://lh6.googleusercontent.com/-QM-yXoFG5iw/U_G7HE9wJHI/AAAAAAAAAzM/b1b2JOJH1X8/s512/Problem_Main.png


Following is my source code.
(Some code are omitted.)

package com.musicg.demo.android;

import android.app.Activity;
import android.app.Notification;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent;
import android.media.AudioManager;
import android.media.AudioManager.OnAudioFocusChangeListener;
import android.media.MediaPlayer;
import android.media.MediaPlayer.OnCompletionListener;
import android.os.Bundle;
import android.os.Vibrator;
import android.util.Log;
import android.view.KeyEvent;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.TextView;


public class MainActivity extends Activity implements OnSignalsDetectedListener {

    static MainActivity mainApp;

    public static final int DETECT_NONE = 0;
    public static final int DETECT_WHISTLE = 1;
    public static int selectedDetection = DETECT_NONE;

    // detection parameters
    private DetectorThread detectorThread;
    private RecorderThread recorderThread;
    private int numWhistleDetected = 0;

    // views
    private View mainView, listeningView, helpView ;
    private Button whistleButton , whistleButton02;

    // alarmVoice()에서 사용하는 변수들  - am, mp, LOG
    private AudioManager am;
    private MediaPlayer mp;

    private String LOG = "My_Tag";

    ImageView imageView01;



    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        mainApp = this;

        // set views
        LayoutInflater inflater = LayoutInflater.from(this);
        mainView = inflater.inflate(R.layout.main, null);
        listeningView = inflater.inflate(R.layout.listening, null);

        setContentView(mainView);

        whistleButton = (Button) this.findViewById(R.id.whistleButton); // Start Button
        whistleButton.setOnClickListener(new ClickEvent());

        whistleButton02 = (Button) this.findViewById(R.id.whistleButton02); // ReadMe Button
        whistleButton02.setOnClickListener(new ClickEvent());

    }

    private void goHomeView() {
        setContentView(mainView);
        if (recorderThread != null) {
            recorderThread.stopRecording();
            recorderThread = null;
        }
        if (detectorThread != null) {
            detectorThread.stopDetection();
            detectorThread = null;
        }
        selectedDetection = DETECT_NONE;
    }

    private void goListeningView() {
        setContentView(listeningView);
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        menu.add(0, 0, 0, "종료");
        return super.onCreateOptionsMenu(menu);
    }



    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0) {
            goHomeView();
            return true;
        }
        return super.onKeyDown(keyCode, event);
    }

    class ClickEvent implements OnClickListener {
        public void onClick(View view) {


            if (view == whistleButton) {    // Start Button
                selectedDetection = DETECT_WHISTLE;
                recorderThread = new RecorderThread();
                recorderThread.start();
                detectorThread = new DetectorThread(recorderThread);
                detectorThread.setOnSignalsDetectedListener(MainActivity.mainApp);
                detectorThread.start(); 
                goListeningView();

            }

            if(view == whistleButton02)     // ReadMe Button
            {
                Intent intent = new Intent(MainActivity.this, help.class );
                startActivity(intent);

            }
        }
    }

    // omitted..


}

Please give me some advice.

Sorry for my bad english.
Thanks in advance.




Following are added context.



I tried to change inflater to setContentView().
But, It's not worked.

I clicked start button and touched back key on my phone.
My phone said "Unfortunately, (MY_APP_NAME) has stopped."

I reupload my source code.

[MainActivity.java]

package com.musicg.demo.android;

import android.app.Activity;
import android.app.Notification;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent;
import android.media.AudioManager;
import android.media.AudioManager.OnAudioFocusChangeListener;
import android.media.MediaPlayer;
import android.media.MediaPlayer.OnCompletionListener;
import android.os.Bundle;
import android.os.Vibrator;
import android.util.Log;
import android.view.KeyEvent;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.TextView;

public class MainActivity extends Activity implements                 OnSignalsDetectedListener {

    static MainActivity mainApp;

    public static final int DETECT_NONE = 0;
    public static final int DETECT_WHISTLE = 1;
    public static int selectedDetection = DETECT_NONE;

    // detection parameters
    private DetectorThread detectorThread;
    private RecorderThread recorderThread;
    private int numWhistleDetected = 0;

    // views
    private View mainView, listeningView, helpView ;
    private Button whistleButton , whistleButton02;

    // alarmVoice()에서 사용하는 변수들  - am, mp, LOG
    private AudioManager am;
    private MediaPlayer mp;

    private String LOG = "My_Tag";

    ImageView imageView01;


    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        mainApp = this;

        // set views
//      LayoutInflater inflater = LayoutInflater.from(this);    // disable inflater

        setContentView(R.layout.main);


//      mainView = inflater.inflate(R.layout.main, null);   // disable inflater
//      listeningView = inflater.inflate(R.layout.listening, null); // disable inflater

//      setContentView(mainView);   // disable inflater

        whistleButton = (Button) this.findViewById(R.id.whistleButton); // Start button
        whistleButton.setOnClickListener(new ClickEvent());

        whistleButton02 = (Button) this.findViewById(R.id.whistleButton02); // ReadMe button
        whistleButton02.setOnClickListener(new ClickEvent());

    }

    private void goHomeView() {
        setContentView(mainView);
        if (recorderThread != null) {
            recorderThread.stopRecording();
            recorderThread = null;
        }
        if (detectorThread != null) {
            detectorThread.stopDetection();
            detectorThread = null;
        }
        selectedDetection = DETECT_NONE;
    }

    private void goListeningView() {
        //setContentView(listeningView);
        setContentView(R.layout.listening);
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        menu.add(0, 0, 0, "Exit");
        return super.onCreateOptionsMenu(menu);
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        switch (item.getItemId()) {
        case 0:
            NotificationManager notiMgr = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
            notiMgr.cancel(999);    // Notification의 고유 id가 999인 것을 찾아서 notification을 종료한다.

            finish();
            break;
        default:
        }
        return super.onOptionsItemSelected(item);
    }

    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0) {
            goHomeView();
            return true;
        }
        return super.onKeyDown(keyCode, event);
    }

    class ClickEvent implements OnClickListener {
        public void onClick(View view) {


            if (view == whistleButton) {
                selectedDetection = DETECT_WHISTLE;
                recorderThread = new RecorderThread();
                recorderThread.start();
                detectorThread = new DetectorThread(recorderThread);
                detectorThread.setOnSignalsDetectedListener(MainActivity.mainApp);
                detectorThread.start(); 
                goListeningView();

            }

            if(view == whistleButton02)
            {
                Intent intent = new Intent(MainActivity.this, help.class );
                startActivity(intent);

            }
        }
    }


    private void Threadsleep(DetectorThread detectorThread){
        try
        {
            detectorThread.sleep(1000);
        }

        catch(InterruptedException e)
        {
            e.printStackTrace();
        }

    }

    protected void onDestroy() {
        super.onDestroy();
    }

    @Override
    public void onWhistleDetected() {
        runOnUiThread(new Runnable() {
            public void run() {

                 TextView textView = (TextView)
                 MainActivity.mainApp.findViewById(R.id.detectedNumberText);                 
                 textView.setText(String.valueOf(numWhistleDetected++));

                if (numWhistleDetected > 1) {
                    setEvent();                 
                }
            }
        });

        Threadsleep(detectorThread);
    }

}


[main.xml]

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" 
    android:background="@drawable/car">

    <Button 
        android:id="@+id/whistleButton"
        android:layout_width="150dp"
        android:layout_height="40dp"
        android:gravity="center"
        android:text="Start"
        android:textSize="20dp"  
        android:background="#FFFFFFFF"
        android:textColor="#FF000000"
        android:padding="5dp"
        android:layout_centerInParent = "true"      
        />

    <Button
        android:id="@+id/whistleButton02"
        android:layout_width="150dp"
        android:layout_height="40dp"
        android:layout_below="@id/whistleButton"
        android:gravity="center"     
        android:text="ReadMe"
        android:background="#FFFFFFFF"
        android:textColor="#FF000000"
        android:textSize="20dp" 
        android:layout_marginTop="15dp"
        android:padding="5dp"           
        android:layout_centerInParent = "true"
         />

</RelativeLayout>


[listening.xml]

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"

    android:layout_width="fill_parent"
    android:layout_height="fill_parent" 
    android:background ="@drawable/worker"
    >

    <TextView
        android:id="@+id/listening"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:gravity="center"
        android:layout_centerVertical="true"
        android:layout_centerInParent="true"
        android:textSize="30dp"    
        android:text="Detecting.." />


    <TextView
        android:id="@+id/detectedText"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@+id/listening"
        android:layout_centerInParent="true"       
        android:textSize="20dp" />       

    <TextView
        android:id="@+id/detectedNumberText"
        android:textStyle="bold"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@+id/listening"        
        android:textSize="5dp"
        android:layout_toRightOf="@+id/detectedText"
         />

</RelativeLayout>


[help.xml]

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >

    <TextView
        android:id="@+id/textView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true"
        android:layout_marginLeft="112dp"
        android:layout_marginTop="20dp"
        android:text="Read Me...." />

</RelativeLayout>


[AndroidManifest.xml]

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.musicg.demo.android"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="8" />

    <uses-permission android:name="android.permission.RECORD_AUDIO" />

    <application
        android:icon="@drawable/ear"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name=".MainActivity"
            android:label="@string/title_activity_main" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
             <activity android:name=".listening"></activity>
             <activity android:name="help"></activity>
    </application>

</manifest>

Upvotes: 0

Views: 110

Answers (1)

vishal arote
vishal arote

Reputation: 126

First of all Use setContentView(R.layout.main) in onCreate() in your oncreate as Akhil mentioned instead of inflating.

Also to set background image to your activity use android:background="@drawable/image_name" to your root container in main.xml.

If you are trying to dynamically switch the image in your lisenter. Try and let us know if it worked.

Also to get more understanding can to show contents of your main.xml ?

Upvotes: 1

Related Questions