问题描述
- 安卓新手 界面底部工具栏设置三个图片按键,点击切换时一直报错,麻烦高手指点下。
-
Eclipse调试错误信息如下:
MainActivity.java代码如下:
package activity;import com.example.social.R;
import fragment.OneFragment;
import fragment.ThreeFragment;
import fragment.TwoFragment;import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.ImageButton;public class MainActivity extends FragmentActivity implements OnClickListener {
private Fragment mOneFragment;
private Fragment mTwoFragment;
private Fragment mThreeFragment;
private View currentButton;private ImageButton mNews, mSetting, mConstact; @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); setContentView(R.layout.main); initView(); } private void initView() { // TODO Auto-generated method stub mOneFragment = getSupportFragmentManager().findFragmentById( R.id.fragment_one);// 第一页 mTwoFragment = getSupportFragmentManager().findFragmentById( R.id.fragment_two);// 第二页 mThreeFragment = getSupportFragmentManager().findFragmentById( R.id.fragment_three);// 第三页 findView(); } private void findView() { // TODO Auto-generated method stub mNews = (ImageButton) findViewById(R.id.buttom_news);// 消息 mConstact = (ImageButton) findViewById(R.id.buttom_constact);// 联系人 mSetting = (ImageButton) findViewById(R.id.buttom_setting);// 我 mNews.setOnClickListener(this); mConstact.setOnClickListener(this); mSetting.setOnClickListener(this); } @Override public void onClick(View v) { // TODO Auto-generated method stub switch (v.getId()) { case R.id.buttom_news: getSupportFragmentManager().beginTransaction().hide(mTwoFragment) .hide(mThreeFragment).show(mOneFragment).commit(); setButton(v); break; case R.id.buttom_constact: getSupportFragmentManager().beginTransaction().hide(mOneFragment) .hide(mThreeFragment).show(mTwoFragment).commit(); setButton(v); break; case R.id.buttom_setting: getSupportFragmentManager().beginTransaction().hide(mOneFragment) .hide(mTwoFragment).show(mThreeFragment).commit(); setButton(v); break; default: getSupportFragmentManager().beginTransaction().hide(mOneFragment) .hide(mTwoFragment).hide(mThreeFragment).commit(); break; } } private void setButton(View v) { if (currentButton != null && currentButton.getId() != v.getId()) { currentButton.setEnabled(true); } v.setEnabled(false); currentButton = v; }
}
main.layout代码如下:
<?xml version="1.0" encoding="utf-8"?>
android:layout_width="match_parent"
android:layout_height="match_parent" ><LinearLayout android:id="@+id/buttom_bar_group" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_alignParentBottom="true" android:gravity="center_vertical" android:orientation="horizontal" > <RelativeLayout style="@style/ButtomBar" > <ImageButton android:id="@+id/buttom_news" style="@style/ButtomBarImgBtn" android:background="@drawable/bar_news" android:contentDescription="@string/app_name" /> </RelativeLayout> <RelativeLayout style="@style/ButtomBar" > <ImageButton android:id="@+id/buttom_constact" style="@style/ButtomBarImgBtn" android:background="@drawable/bar_constact" android:contentDescription="@string/app_name" /> </RelativeLayout> <RelativeLayout style="@style/ButtomBar" > <ImageButton android:id="@+id/buttom_setting" style="@style/ButtomBarImgBtn" android:background="@drawable/bar_setting" android:contentDescription="@string/app_name" /> </RelativeLayout> </LinearLayout> <View android:id="@+id/line" android:layout_width="match_parent" android:layout_height="0.5dp" android:layout_above="@id/buttom_bar_group" android:background="#CBCED2" /> <FrameLayout android:id="@+id/fl_content" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_above="@id/line" > <fragment android:id="@+id/fragment_one" android:name="fragment.OneFragment" android:layout_width="match_parent" android:layout_height="match_parent" /> <fragment android:id="@+id/fragment_two" android:name="fragment.TwoFragment" android:layout_width="match_parent" android:layout_height="match_parent" /> <fragment android:id="@+id/fragment_three" android:name="fragment.ThreeFragment" android:layout_width="match_parent" android:layout_height="match_parent" /> </FrameLayout>
selector设置图片Button控件,其中的联系人控件:
<?xml version="1.0" encoding="utf-8"?><item android:drawable="@drawable/skin_tab_icon_contact_selected" android:state_enabled="false"/> <item android:drawable="@drawable/skin_tab_icon_contact_selected" android:state_pressed="true"/> <item android:drawable="@drawable/skin_tab_icon_contact_normal"/>
错误详细描述:
点击图片按键时,显示停止运行,然后重新载入主界面,主界面三个fragment叠加显示出来。
耽误高手一点点时间指点下,谢谢。
解决方案
那不是已经明确告诉你是空指针错误了吗,那你就从点击开始跟踪调试,看看谁是空的,肯定是某个对象没有得到,但是你也没有容错处理
解决方案二:
这会没电脑,手机看着不方便,空指针异常,你可以看看你点击后执行的代码是不是有未初始化的,或者是不能访问到的变量!还有就是你的点击监听里不要把代码写在一行,特别是一开始学习,分开写便于调试!祝你好运
解决方案三:
空指针很好调,设断点,哪里报空指针就在前面设断点。加油