Android按钮onClickListener引发空异常
我无法为我的Android按钮onClickListener引发空异常,android,button,onclicklistener,Android,Button,Onclicklistener,我无法为我的按钮设置onclicklistener。虽然其中一些工作正常,但另一些工作不正常。代码没有显示任何错误,但当我运行应用程序时,日志中出现了错误,其中一个显示为NullPointerException按钮,而不是匿名按钮,但这告诉我voidonClick()不是变量的有效类型。我已尝试将按钮的XML代码设置为调用代码中定义的onClick(),但这也会在运行时引发错误。我还尝试在onCreate()之外声明onClick(),但这也会在运行时引发错误。不工作的按钮是homeb01。我被
按钮设置onclicklistener
。虽然其中一些工作正常,但另一些工作不正常。代码没有显示任何错误,但当我运行应用程序时,日志中出现了错误,其中一个显示为NullPointerException
按钮,而不是匿名按钮,但这告诉我voidonClick()
不是变量的有效类型。我已尝试将按钮的XML代码设置为调用代码中定义的onClick()
,但这也会在运行时引发错误。我还尝试在onCreate()
之外声明onClick()
,但这也会在运行时引发错误。不工作的按钮是homeb01。我被卡住了,我的代码在下面,我真的需要一些帮助。多谢各位
package com.example.deenbuddy;
import java.util.ArrayList;
import java.util.List;
import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.ListView;
public class MainActivity extends Activity
{
MainActivity context;
//Arrays for RowItem values
final Integer[] uname = new Integer[] {R.string.temp_uname0,R.string.temp_uname0,R.string.temp_uname0,R.string.temp_uname0};
final Integer[] ustatus = new Integer[]{R.string.temp_ustatus0,R.string.temp_ustatus0,R.string.temp_ustatus0,R.string.temp_ustatus0};
final Integer[] upic = new Integer[]{R.drawable.tig0,R.drawable.tig0,R.drawable.tig0,R.drawable.tig0};
//ListView and RowItem for ListView
ListView listview;
List<RowItem> rowItem;
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
context = this;
//Navigation Buttons
final Button homeb0 = (Button) findViewById(R.id.home_b0);
final Button newsb0 = (Button) findViewById(R.id.news_b0);
final Button featb0 = (Button) findViewById(R.id.feature_b0);
final Button homeb01 = (Button) findViewById(R.id.home_b1);
final Button newsb01 = (Button) findViewById(R.id.news_b1);
final Button featb01 = (Button) findViewById(R.id.feature_b1);
//News Buttons
final ImageView newsb1 = (ImageView) findViewById(R.id.news1);
final ImageView newsb2 = (ImageView) findViewById(R.id.news2);
final ImageView newsb3 = (ImageView) findViewById(R.id.news3);
final ImageView newsb4 = (ImageView) findViewById(R.id.news4);
//Feature Buttons
final ImageView featb1 = (ImageView) findViewById(R.id.feat1);
final ImageView featb2 = (ImageView) findViewById(R.id.feat2);
final ImageView featb3 = (ImageView) findViewById(R.id.feat3);
final ImageView featb4 = (ImageView) findViewById(R.id.feat4);
//OnClicks
//OnClick for Navigation
//h_home
homeb0.setOnClickListener(new View.OnClickListener(){
public void onClick(View view2)
{
setContentView(R.layout.activity_main);
}
});
//f_home
试着这样做
//Navigation Buttons
final Button homeb0 = (Button) findViewById(R.id.home_b0);
final Button newsb0 = (Button) findViewById(R.id.news_b0);
final Button featb0 = (Button) findViewById(R.id.feature_b0);
final Button homeb01 = (Button) findViewById(R.id.home_b1);
final Button newsb01 = (Button) findViewById(R.id.news_b1);
final Button featb01 = (Button) findViewById(R.id.feature_b1);
//News Buttons
final ImageView newsb1 = (ImageView) findViewById(R.id.news1);
final ImageView newsb2 = (ImageView) findViewById(R.id.news2);
final ImageView newsb3 = (ImageView) findViewById(R.id.news3);
final ImageView newsb4 = (ImageView) findViewById(R.id.news4);
//Feature Buttons
final ImageView featb1 = (ImageView) findViewById(R.id.feat1);
final ImageView featb2 = (ImageView) findViewById(R.id.feat2);
final ImageView featb3 = (ImageView) findViewById(R.id.feat3);
final ImageView featb4 = (ImageView) findViewById(R.id.feat4);
//OnClicks
homeb0.setOnClickListener(this);
newsb0.setOnClickListener(this);
featb0.setOnClickListener(this);
newsb01.setOnClickListener(this);
homeb01.setOnClickListener(this);
featb01.setOnClickListener(this);
newsb1.setOnClickListener(this);
newsb2.setOnClickListener(this);
newsb3.setOnClickListener(this);
newsb4.setOnClickListener(this);
featb1.setOnClickListener(this);
featb2.setOnClickListener(this);
featb3.setOnClickListener(this);
featb4.setOnClickListener(this);
}
@Override
public void onClick(View arg0) {
switch (arg0.getId()) {
case R.id.home_b0:
//Code
break;
case R.id.newsb0:
//Code
break;
case R.id.featb0:
//Code
break;
case R.id.newsb01:
//Code
break;
case R.id.homeb01:
//Code
break;
case R.id.featb01:
//Code
break;
case R.id.home_b0:
//Code
break;
case R.id.newsb1:
//Code
break;
case R.id.newsb2:
//Code
break;
case R.id.newsb3:
//Code
break;
case R.id.newsb4:
//Code
break;
case R.id.featb1:
//Code
break;
case R.id.featb2:
//Code
break;
default:
break;
}
}
为什么设置ContentView(R.layout.activity_main);在按钮点击事件中,您是否可以确切说出您想要做什么确保您在xml中声明的“home_b1”id如下所示:
<Button
android:id="@+id/home_b1"/>
不要错过id前面的“+”。不要多次调用setContentView
,而是使用ViewFlipper
或FrameLayout
我会研究这一点,并让您知道会发生什么,谢谢在onClick()中没有要执行的代码你的homeb01按钮的onClickListener…发布日志请确认我已经发布了日志并更新了代码,谢谢allit为每个按钮创建单独的OnClickListener类总比在活动中实现方法要好。我将content view设置为我的main_活动布局,因为如果用户转到其他页面并希望返回到主页面,则contentView必须更改,您可以创建单独的类(我更喜欢片段)。对不起,我还是不明白你的逻辑。bcoz你可以将CLS传递给intent。这样你可以返回到主类。但是我想更改布局我应该为每个布局创建单独的类吗?
//Navigation Buttons
final Button homeb0 = (Button) findViewById(R.id.home_b0);
final Button newsb0 = (Button) findViewById(R.id.news_b0);
final Button featb0 = (Button) findViewById(R.id.feature_b0);
final Button homeb01 = (Button) findViewById(R.id.home_b1);
final Button newsb01 = (Button) findViewById(R.id.news_b1);
final Button featb01 = (Button) findViewById(R.id.feature_b1);
//News Buttons
final ImageView newsb1 = (ImageView) findViewById(R.id.news1);
final ImageView newsb2 = (ImageView) findViewById(R.id.news2);
final ImageView newsb3 = (ImageView) findViewById(R.id.news3);
final ImageView newsb4 = (ImageView) findViewById(R.id.news4);
//Feature Buttons
final ImageView featb1 = (ImageView) findViewById(R.id.feat1);
final ImageView featb2 = (ImageView) findViewById(R.id.feat2);
final ImageView featb3 = (ImageView) findViewById(R.id.feat3);
final ImageView featb4 = (ImageView) findViewById(R.id.feat4);
//OnClicks
homeb0.setOnClickListener(this);
newsb0.setOnClickListener(this);
featb0.setOnClickListener(this);
newsb01.setOnClickListener(this);
homeb01.setOnClickListener(this);
featb01.setOnClickListener(this);
newsb1.setOnClickListener(this);
newsb2.setOnClickListener(this);
newsb3.setOnClickListener(this);
newsb4.setOnClickListener(this);
featb1.setOnClickListener(this);
featb2.setOnClickListener(this);
featb3.setOnClickListener(this);
featb4.setOnClickListener(this);
}
@Override
public void onClick(View arg0) {
switch (arg0.getId()) {
case R.id.home_b0:
//Code
break;
case R.id.newsb0:
//Code
break;
case R.id.featb0:
//Code
break;
case R.id.newsb01:
//Code
break;
case R.id.homeb01:
//Code
break;
case R.id.featb01:
//Code
break;
case R.id.home_b0:
//Code
break;
case R.id.newsb1:
//Code
break;
case R.id.newsb2:
//Code
break;
case R.id.newsb3:
//Code
break;
case R.id.newsb4:
//Code
break;
case R.id.featb1:
//Code
break;
case R.id.featb2:
//Code
break;
default:
break;
}
}
<Button
android:id="@+id/home_b1"/>