Android: Как запустить Активность через кнопку? - PullRequest
4 голосов
/ 03 января 2012

Noob Android-разработчик здесь Я больше графика, чем код, но думал, что начну больше писать. В любом случае, у меня есть несколько кнопок на главной странице активности, и я хочу, чтобы при нажатии кнопки открывался другой класс / действие. Я перепробовал все методы, которые искал, и что-то все еще не работает, когда я нажимаю кнопку в эмуляторе, он просто ничего не делает, не останавливается и не делает ничего просто, кто-то указывает мне на право направление пожалуйста.

Код с главной страницы, где живет кнопка:

public class StartingPoint extends Activity {
protected void onCreate(Bundle aim) {
    super.onCreate(aim);

    setContentView(R.layout.main);

    final Button bSL = (Button) findViewById(R.id.bSongList);
    bSL.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {

            Intent SongList = new Intent(StartingPoint.this, SongList.class);
            StartingPoint.this.startActivity(SongList);
        }
    });
}
}

Manifest

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="myname.appname"
    android:versionCode="1"
    android:versionName="1.0" >

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

    <application
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@android:style/Theme.Black.NoTitleBar" >
        <activity
            android:name=".Splash"
            android:label="@string/app_name"
            android:theme="@android:style/Theme.Black.NoTitleBar.Fullscreen" >
            <intent-filter>
                <action android:name="myname.appname.SPLASH" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity
            android:name=".StartingPoint"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="myname.appname.STARTINGPOINT" />

                <category android:name="android.intent.category.DEFAULT" />
            </intent-filter>
        </activity>
        <activity
            android:name=".SongList"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="myname.appname.SONGLIST" />

                <category android:name="android.intent.category.DEFAULT" />
            </intent-filter>
        </activity>
    </application>

</manifest>

-L

Last 3 lines of logcat just after clicking the button in question.

01-02 21:59:50.473: I/ActivityManager(75): Starting: Intent { cmp=myname.appname/.SongList } from pid 681
01-02 21:59:52.953: I/ActivityManager(75): Displayed myname.appname/.SongList: +2s351ms
01-02 21:59:58.565: D/dalvikvm(348): GC_EXPLICIT freed 8K, 55% free 2591K/5703K,     external 1625K/2137K, paused 520ms

Ответы [ 5 ]

4 голосов
/ 03 января 2012

Попробуйте это:

Intent songList = new Intent(StartingPoint.this, SongList.class);
startActivity(songList);

Вы получаете какие-либо ошибки? Вам нужно добавить каждое действие, которое вы создаете в манифесте. Если у вас есть два действия и только Главное в манифесте, это может быть вашей проблемой.

Если подумать, я считаю, что ваш манифест неверен. Проверь это. С Главным (Ваша отправная точка) и вторым меню:

<activity android:name="com.activities.Main">
        <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>  
    </activity>
    <activity android:name="com.activities.Menu"></activity>

Попробуйте этот манифест:

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="myname.appname"
    android:versionCode="1"
    android:versionName="1.0" >

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

    <application
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@android:style/Theme.Black.NoTitleBar" >
        <activity
            android:name=".Splash"
            android:label="@string/app_name"
            android:theme="@android:style/Theme.Black.NoTitleBar.Fullscreen" >
            <intent-filter>
                    <action android:name="android.intent.action.MAIN" />
                    <category android:name="android.intent.category.LAUNCHER" />               
            </intent-filter>
        </activity>
        <activity
            android:name=".StartingPoint"
            android:label="@string/app_name" >           
        </activity>
        <activity
            android:name=".SongList"
            android:label="@string/app_name" >            
        </activity>
    </application>

</manifest>

Вам не нужно добавлять фильтр для каждого действия. Я понял, что у вас есть только одна запись Activity, и это заставка. Однако вам может понадобиться изменить манифест, чтобы изменить ".Splash" и все остальные действия на полный путь, включая пакет.

1 голос
/ 03 января 2012

Ваша активность не начинается, потому что в ней есть исключение NullPointerException.(Строка 10).Когда вы делаете findViewById для чего-то, чего нет в вашем макете, скорее всего.

При возникновении подобных проблем обычно полезно прочитать красные линии.По сути, он гласит: «Привет! У вас нулевой объект в строке SongList 10, когда вы пытаетесь его запустить!»Это делается во время инициализации объекта, задолго до вызова onCreate, поэтому задолго до того, как вы вызвали setContentView.

Вы должны инициализировать свои виджеты после установки представления.

1 голос
/ 03 января 2012

// Какое имя вашего пакета для вашего SongList

, как показывает ваш журнал кошек

01-02 21:59:50.473: I/ActivityManager(75): Starting: Intent { cmp=myname.appname/.SongList } from pid 681
01-02 21:59:52.953: I/ActivityManager(75): Displayed myname.appname/.SongList: +2s351ms

// использовать полное имя пакета в вашей активности в manifest.xml

<activity
        android:name="myname.appname.SongList"
        android:label="@string/app_name" >       
    </activity>
0 голосов
/ 03 января 2012

Для кода попробуйте это:

Intent songListIntent = new Intent(this, SongList.class);
StartingPoint.this.startActivity(songListIntent);

И для манифеста:

<activity android:name=".SongList"></activity>
0 голосов
/ 03 января 2012
Intent SongList = new Intent(StartingPoint.this, SongList.class);
            startActivity(SongList);

и в Manifest введите

 <application .....>
<activity android:name=".CustomSurfaceView"></activity>
</application>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...