2014-07-11 64 views
1

我在为Buttons设置onclicklistener时遇到问题。虽然其中一些工作正常,但其他人却没有工作。该代码显示没有错误,但是当我运行该应用程序时,出现了Log中的错误,其中一个说NullPointerException按钮而不是匿名,但是这告诉我无效onClick()不是有效的变量类型。我曾尝试将Button的XML代码设置为调用代码中定义的onClick(),但这也会在运行时引发错误。我也尝试在onCreate()之外声明onClick(),但在运行时也会引发错误。不工作的按钮是homeb01。我被卡住了,我的代码在下面,我真的可以使用一些帮助。谢谢。Android按钮onClickListener会抛出空例外

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 

不工作的按钮是这一个,homeb01

homeb01.setOnClickListener(new View.OnClickListener() { 
     public void onClick(View v) 
     { 
      setContentView(R.layout.activity_main); 

     } 
    }); 

    //n_home 
    //h_news 
    newsb0.setOnClickListener(new View.OnClickListener() { 

     public void onClick(View v) 
     { 
      setContentView(R.layout.newstitle); 
     } 
    }); 
    //h_feat 
    featb0.setOnClickListener(new View.OnClickListener(){ 

     public void onClick(View v) 
     { 
      setContentView(R.layout.featurestitle); 
     } 
    }); 

    //OnClicks for news 
    newsb1.setOnClickListener(new View.OnClickListener(){ 
     public void onClick(View v) 
     { 
      setContentView(R.layout.newstitle); 
     } 
    }); 

    newsb2.setOnClickListener(new View.OnClickListener(){ 
     public void onClick(View v) 
     { 
      setContentView(R.layout.newstitle); 
     } 
    }); 

    newsb3.setOnClickListener(new View.OnClickListener(){ 
     public void onClick(View v) 
     { 
      setContentView(R.layout.newstitle); 
     } 
    }); 

    newsb4.setOnClickListener(new View.OnClickListener(){ 
     public void onClick(View v) 
     { 
      setContentView(R.layout.newstitle); 
     } 
    }); 

    //OnClicks for feat 
    featb1.setOnClickListener(new View.OnClickListener(){ 
     public void onClick(View v) 
     { 
      setContentView(R.layout.featurestitle); 
     } 
    }); 

    featb2.setOnClickListener(new View.OnClickListener(){ 
     public void onClick(View v) 
     { 
      setContentView(R.layout.featurestitle); 
     } 
    }); 

    featb3.setOnClickListener(new View.OnClickListener(){ 
     public void onClick(View v) 
     { 
      setContentView(R.layout.featurestitle); 
     } 
    }); 

    featb4.setOnClickListener(new View.OnClickListener(){ 
     public void onClick(View v) 
     { 
      setContentView(R.layout.featurestitle); 
     } 
    }); 



    rowItem = new ArrayList<RowItem>(); 
    for(int x = 0; x < uname.length; x++) 
    { 
     RowItem item = new RowItem(upic[x], uname[x], ustatus[x]); 
     rowItem.add(item); 
    } 

    listview = (ListView) findViewById(R.id.sfeed); 
    CListView adapter = new CListView(this,R.layout.sfeed_list,rowItem); 
    listview.setAdapter(adapter); 


} 


@Override 
public boolean onCreateOptionsMenu(Menu menu) 
{ 
    // Inflate the menu; this adds items to the action bar if it is present. 
    getMenuInflater().inflate(R.menu.main, menu); 
    return true; 
} 





} 

我的logcat如下:

07-11 01:54:58.247: E/Trace(21487): error opening trace file: No such file or directory (2) 
07-11 01:54:59.833: D/AndroidRuntime(21487): Shutting down VM 
07-11 01:54:59.833: W/dalvikvm(21487): threadid=1: thread exiting with uncaught exception (group=0x414252a0) 
07-11 01:54:59.942: E/AndroidRuntime(21487): FATAL EXCEPTION: main 
07-11 01:54:59.942: E/AndroidRuntime(21487): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.deenbuddy/com.example.deenbuddy.MainActivity}: java.lang.NullPointerException 
07-11 01:54:59.942: E/AndroidRuntime(21487): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2136) 
07-11 01:54:59.942: E/AndroidRuntime(21487): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2174) 
07-11 01:54:59.942: E/AndroidRuntime(21487): at android.app.ActivityThread.access$700(ActivityThread.java:141) 
07-11 01:54:59.942: E/AndroidRuntime(21487): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1267) 
07-11 01:54:59.942: E/AndroidRuntime(21487): at android.os.Handler.dispatchMessage(Handler.java:99) 
07-11 01:54:59.942: E/AndroidRuntime(21487): at android.os.Looper.loop(Looper.java:137) 
07-11 01:54:59.942: E/AndroidRuntime(21487): at android.app.ActivityThread.main(ActivityThread.java:5059) 
07-11 01:54:59.942: E/AndroidRuntime(21487): at java.lang.reflect.Method.invokeNative(Native Method) 
07-11 01:54:59.942: E/AndroidRuntime(21487): at java.lang.reflect.Method.invoke(Method.java:511) 
07-11 01:54:59.942: E/AndroidRuntime(21487): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:792) 
07-11 01:54:59.942: E/AndroidRuntime(21487): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:555) 
07-11 01:54:59.942: E/AndroidRuntime(21487): at dalvik.system.NativeStart.main(Native Method) 
07-11 01:54:59.942: E/AndroidRuntime(21487): Caused by: java.lang.NullPointerException 
07-11 01:54:59.942: E/AndroidRuntime(21487): at com.example.deenbuddy.MainActivity.onCreate(MainActivity.java:70) 
07-11 01:54:59.942: E/AndroidRuntime(21487): at android.app.Activity.performCreate(Activity.java:5058) 
07-11 01:54:59.942: E/AndroidRuntime(21487): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1079) 
07-11 01:54:59.942: E/AndroidRuntime(21487): at  
android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2100) 
07-11 01:54:59.942: E/AndroidRuntime(21487): ... 11 more 
07-11 01:55:02.856: I/Process(21487): Sending signal. PID: 21487 SIG: 9 
+0

发表您的logcat –

+0

而不是调用'setContentView'多次,使用'ViewFlipper'或'FrameLayout' – intrepidkarthi

+0

我会考虑这一点,并让你知道会发生什么,谢谢 – user2204661

回答

0

尝试做这样的

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

} 

为什么setContentView(R.layout.activity_main);按钮单击事件里面,你能告诉究竟你想做的事

+0

为每个按钮创建单独的OnClickListener类总是更好,而不是实现方法在你的活动中。 –

+0

我将内容视图设置为我的main_activity布局,因为如果用户转到其他页面并希望返回到主paige contentView必须更改 – user2204661

+0

您可以创建单独的类(更喜欢Fragment)。仍然我不理解您的逻辑.bcoz,你可以传递一个信息给一个intent.by你可以回到主类。 – Meghna

0

确保您在XML“home_b1” ID的声明如下:

<Button 
android:id="@+id/home_b1"/> 

不要错过“+”之前的ID。