Android:如何通过按钮启动活动?

时间:2012-01-02 21:47:42

标签: java android button android-activity

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

清单

<?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 个答案:

答案 0 :(得分:4)

试试这个:

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

你有任何错误吗?您需要在清单中添加您创建的每个活动。如果你有两个活动而且清单中只有Main,那可能就是你的问题。

第二个想法,我相信你的表现是错误的。检查一下。使用Main(您的起点)和Menu是第二个:

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

您无需在每个活动上添加过滤器。我知道你只有一个条目活动,那就是启动画面。但是,您可能需要更改清单以将“.Splash”和其他每个Activity更改为包括包的完整路径。

答案 1 :(得分:1)

//你的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>

答案 2 :(得分:1)

您的活动未启动,因为其中包含NullPointerException。 (第10行)。当您对布局中不存在的内容执行findViewById时,很有可能。

面对这类问题时,阅读红线通常很有帮助。它基本上说:“嘿!当你试图启动它时,你在SongList第10行中有一个空对象!”

修改

ImageView ivlogo = (ImageView) findViewById(R.id.ivsonglogo);
ExpandableListView elv1 = (ExpandableListView) findViewById(R.id.elv1);

这永远不会奏效。这是在对象初始化期间完成的,远在调用onCreate之前,因此在调用setContentView之前很久。

您必须在设置视图后初始化小部件。

答案 3 :(得分:0)

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

并在Manifest中输入此

 <application .....>
<activity android:name=".CustomSurfaceView"></activity>
</application>

答案 4 :(得分:0)

对于代码,试试这个:

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

对于清单:

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