Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/200.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android按钮onClickListener引发空异常_Android_Button_Onclicklistener - Fatal编程技术网

Android按钮onClickListener引发空异常

Android按钮onClickListener引发空异常,android,button,onclicklistener,Android,Button,Onclicklistener,我无法为我的按钮设置onclicklistener。虽然其中一些工作正常,但另一些工作不正常。代码没有显示任何错误,但当我运行应用程序时,日志中出现了错误,其中一个显示为NullPointerException按钮,而不是匿名按钮,但这告诉我voidonClick()不是变量的有效类型。我已尝试将按钮的XML代码设置为调用代码中定义的onClick(),但这也会在运行时引发错误。我还尝试在onCreate()之外声明onClick(),但这也会在运行时引发错误。不工作的按钮是homeb01。我被

我无法为我的
按钮设置
onclicklistener
。虽然其中一些工作正常,但另一些工作不正常。代码没有显示任何错误,但当我运行应用程序时,
日志中出现了错误,其中一个显示为
NullPointerException
按钮,而不是匿名按钮,但这告诉我void
onClick()
不是变量的有效类型。我已尝试将
按钮的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"/>