我设置了一个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);
}
}
答案 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;如果你打算在事后做一些事情,你对变量的看法。 (比如在它们上设置监听器,更改文本等等。)