更改意图时应用程序崩溃了吗?

时间:2014-06-26 22:50:04

标签: android android-activity

我设置了一个imageview来改变我在onClick上的活动,由于某些原因,每次我点击设备上的imageview时它都会崩溃。有任何想法吗?我觉得这是一个非常普遍的答案,我错过了。此外,如果你有任何阅读材料,你可以链接到我的错误,这将对我有很大的帮助。谢谢!

主要活动

    package com.gcomcode.oakgang;


import android.content.Intent;
import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.ImageView;

public class MainActivity extends ActionBarActivity {

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


    ImageView musicicon = (ImageView) findViewById(R.drawable.musicicon);
    ImageView galleryicon = (ImageView) findViewById(R.drawable.gallery);
    ImageView connecticon = (ImageView) findViewById (R.drawable.connecticon);
    ImageView contacticon = (ImageView) findViewById (R.drawable.contacticon);
    ImageView eventsicon = (ImageView) findViewById (R.drawable.eventsicon);
            }
public void bioClick() {
     bioicon  = (ImageView) findViewById(R.drawable.bioicon);
     bioicon.setOnClickListener(new OnClickListener() {
         @Override
         public void onClick(View view) {
             Intent bioIntent = new Intent(MainActivity.this, BioActivity.class);
             startActivity(bioIntent);

         }

     });



}
}

这是相应的布局

    <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/container"
android:layout_width="fill_parent"
android:layout_height="match_parent"
android:background="@color/black"
tools:context="com.gcomcode.oakgang.MainActivity"
tools:ignore="MergeRootFrame" >

<RelativeLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:gravity="center_vertical" >

    <ImageView
        android:id="@+id/imageView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:background="@color/black"
        android:src="@drawable/oakganglogo" 
         />

    <android.support.v7.widget.Space
        android:id="@+id/space1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentLeft="true"
        android:layout_alignParentTop="true"
        android:layout_marginLeft="144dp"
        android:layout_marginTop="216dp" />

</RelativeLayout>

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="100dp" >

    <ImageView
        android:id="@+id/bioicon"
        android:layout_width="100dp"
        android:layout_height="100dp"
        android:src="@drawable/bioicon"
        android:onClick="bioClick" />

    <android.support.v7.widget.Space
        android:id="@+id/space3"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

    <ImageView
        android:id="@+id/musicicon"
        android:layout_width="100dp"
        android:layout_height="100dp"
        android:src="@drawable/musicicon" />

    <ImageView
        android:id="@+id/galleryicon"
        android:layout_width="100dp"
        android:layout_height="100dp"
        android:src="@drawable/gallery" />

    <android.support.v7.widget.Space
        android:id="@+id/space2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />
</LinearLayout>

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="85dp"
    android:layout_gravity="bottom" >

    <ImageView
        android:id="@+id/eventsicon"
        android:layout_width="100dp"
        android:layout_height="85dp"
        android:src="@drawable/eventsicon" />

    <ImageView
        android:id="@+id/contacticon"
        android:layout_width="100dp"
        android:layout_height="85dp"
        android:src="@drawable/contacticon" />

    <ImageView
        android:id="@+id/connecticon"
        android:layout_width="100dp"
        android:layout_height="85dp"
        android:src="@drawable/connecticon" />

</LinearLayout>

这是我试图打开的活动

    package com.gcomcode.oakgang;

import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;

public class BioActivity extends ActionBarActivity {

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


    }
}

1 个答案:

答案 0 :(得分:0)

改变这个:

public void bioClick() { 

到此:

public void bioClick(View view) {

因为要从xml(布局文件)调用onClick方法,onClick方法必须只接受一个参数,一个View参数。(传入的视图)该方法是任何一个视图 - 无论哪个视图被按下。如果你想要多个视图调用相同的onClick方法,这很有用,因为那时你可以使用视图变量来确定哪个视图调用它,并相应地做出响应。 )

现在,您的代码存在另一个问题:

如果你做了我写的那个改变,那么它可能会停止崩溃,因为现在它将能够找到正确的onclick方法。但是,当您第一次点击bioicon时,它不会带您进入新活动。您会发现必须将其点击两次才能进入新活动。这是因为第一次单击它时,它会运行bioClick方法。但该方法唯一能做的就是从&#34; bioClick&#34;更改ImageView的onClick方法。新的内部方法。如果您希望活动在第一次更改时单击bioicon ImageView,请将方法更改为如下所示:

public void bioClick() {
     Intent bioIntent = new Intent(MainActivity.this, BioActivity.class);
     startActivity(bioIntent);
}

这部分代码:

bioicon  = (ImageView) findViewById(R.drawable.bioicon);
bioicon.setOnClickListener(new OnClickListener() {
         @Override
         public void onClick(View view) {
             Intent bioIntent = new Intent(MainActivity.this, BioActivity.class);
             startActivity(bioIntent);

         }

     });

是如何在代码中以编程方式设置onClickListener的。如果在xml布局文件中设置onClickListener(使用android:onClick="bioClick"),则不需要以编程方式设置onClickListener。做其中一个,但不是两个。

虽然我很喜欢,但我还要指出,除非你的第一个活动的onCreate方法中的代码多于你在此处显示的代码,否则完全没有必要这样做:

    ImageView musicicon = (ImageView) findViewById(R.drawable.musicicon);
    ImageView galleryicon = (ImageView) findViewById(R.drawable.gallery);
    ImageView connecticon = (ImageView) findViewById (R.drawable.connecticon);
    ImageView contacticon = (ImageView) findViewById (R.drawable.contacticon);
    ImageView eventsicon = (ImageView) findViewById (R.drawable.eventsicon);

你只需要&#34;得到&#34;如果你打算在事后做一些事情,你对变量的看法。 (比如在它们上设置监听器,更改文本等等。)