片段内的OnClickListener给出Null Pointer Exception

时间:2015-03-10 09:10:11

标签: android android-fragments nullpointerexception

我有一个图像按钮来删除片段中列表视图中的特定行。当我从主活动中运行活动时,它会给出NPE。

这是logcat输出

03-10 12:29:36.647    2525-2525/com.restaurantmgmt.dcode1.restaurantms E/libprocessgroup﹕ failed to make and chown /acct/uid_10007: Read-only file system
03-10 12:29:50.351    2525-2525/com.restaurantmgmt.dcode1.restaurantms E/AndroidRuntime﹕ FATAL EXCEPTION: main
    Process: com.restaurantmgmt.dcode1.restaurantms, PID: 2525
    java.lang.RuntimeException: Unable to start activity ComponentInfo{com.restaurantmgmt.dcode1.restaurantms/com.restaurantmgmt.dcode1.restaurantms.menu}: android.view.InflateException: Binary XML file line #19: Error inflating class fragment
            at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2298)
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2360)
            at android.app.ActivityThread.access$800(ActivityThread.java:144)
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1278)
            at android.os.Handler.dispatchMessage(Handler.java:102)
            at android.os.Looper.loop(Looper.java:135)
            at android.app.ActivityThread.main(ActivityThread.java:5221)
            at java.lang.reflect.Method.invoke(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:372)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)
     Caused by: android.view.InflateException: Binary XML file line #19: Error inflating class fragment
            at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:763)
            at android.view.LayoutInflater.rInflate(LayoutInflater.java:806)
            at android.view.LayoutInflater.inflate(LayoutInflater.java:504)
            at android.view.LayoutInflater.inflate(LayoutInflater.java:414)
            at android.view.LayoutInflater.inflate(LayoutInflater.java:365)
            at android.support.v7.app.ActionBarActivityDelegateBase.setContentView(ActionBarActivityDelegateBase.java:228)
            at android.support.v7.app.ActionBarActivity.setContentView(ActionBarActivity.java:102)
            at com.restaurantmgmt.dcode1.restaurantms.menu.onCreate(menu.java:18)
            at android.app.Activity.performCreate(Activity.java:5933)
            at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1105)
            at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2251)
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2360)
            at android.app.ActivityThread.access$800(ActivityThread.java:144)
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1278)
            at android.os.Handler.dispatchMessage(Handler.java:102)
            at android.os.Looper.loop(Looper.java:135)
            at android.app.ActivityThread.main(ActivityThread.java:5221)
            at java.lang.reflect.Method.invoke(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:372)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)
     Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'void android.widget.ImageButton.setOnClickListener(android.view.View$OnClickListener)' on a null object reference
            at com.restaurantmgmt.dcode1.restaurantms.SidePanelFragment.onCreateView(SidePanelFragment.java:45)
            at android.app.Fragment.performCreateView(Fragment.java:2053)
            at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:870)
            at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:1045)
            at android.app.FragmentManagerImpl.addFragment(FragmentManager.java:1147)
            at android.app.FragmentManagerImpl.onCreateView(FragmentManager.java:2116)
            at android.app.Activity.onCreateView(Activity.java:5282)
            at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:733)
            at android.view.LayoutInflater.rInflate(LayoutInflater.java:806)
            at android.view.LayoutInflater.inflate(LayoutInflater.java:504)
            at android.view.LayoutInflater.inflate(LayoutInflater.java:414)
            at android.view.LayoutInflater.inflate(LayoutInflater.java:365)
            at android.support.v7.app.ActionBarActivityDelegateBase.setContentView(ActionBarActivityDelegateBase.java:228)
            at android.support.v7.app.ActionBarActivity.setContentView(ActionBarActivity.java:102)
            at com.restaurantmgmt.dcode1.restaurantms.menu.onCreate(menu.java:18)
            at android.app.Activity.performCreate(Activity.java:5933)
            at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1105)
            at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2251)
            at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2360)
            at android.app.ActivityThread.access$800(ActivityThread.java:144)
            at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1278)
            at android.os.Handler.dispatchMessage(Handler.java:102)
            at android.os.Looper.loop(Looper.java:135)
            at android.app.ActivityThread.main(ActivityThread.java:5221)
            at java.lang.reflect.Method.invoke(Native Method)
            at java.lang.reflect.Method.invoke(Method.java:372)
            at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899)
            at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694)

以下是SidePanelActivity的相关代码

public class SidePanelFragment extends android.app.Fragment implements View.OnClickListener {

    ListView list1;
    Items addedItems=null;
    ImageButton btnDelete;
    Items[] addedItms=new Items[100];
    //Items[] addedItms=null;
    ArrayList<Items> itemsArray=null;
    ItemsAdapter1 adapter=null;
    int countSideList=0;
    @Override
    public View onCreateView(LayoutInflater inflater,  ViewGroup container,  Bundle savedInstanceState) {


        View view =inflater.inflate(R.layout.fragment_side_panel,container,false);
        list1=(ListView)view.findViewById(R.id.listViewSide);
        btnDelete=(ImageButton)view.findViewById(R.id.btndelete);
        itemsArray= new ArrayList<Items>();
      btnDelete.setOnClickListener(this);



        return  view;
    }
@Override
public void onClick(View v) {
    Toast.makeText(getActivity(),"btndelete clicked",Toast.LENGTH_LONG);

}

}

这是具有片段的活动

public class menu extends ActionBarActivity implements  OnAddItemPressed{

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_menu);

        int screenOrien=getResources().getConfiguration().orientation;

        if(screenOrien== Configuration.ORIENTATION_PORTRAIT) {

            hideSidePanel();
        }
        else
        {


        }
    }

    private void hideSidePanel() {
        View side=findViewById(R.id.side_panel);
        if(side.getVisibility()==View.VISIBLE)
        {
            side.setVisibility(View.GONE);
        }
    }

    @Override
    public void onAddItemPressed(Items item){
        FragmentManager manager= getFragmentManager();

        SidePanelFragment sideObj= (SidePanelFragment) manager.findFragmentById(R.id.side_panel);
        sideObj.getAddedItems(item);
    }



}

我在btnDelete.setOnClickListener(this);设置了一个断点 并且在该断点的调试窗口中btnDelete为空。

1 个答案:

答案 0 :(得分:-1)

尝试这种方式:

    @Override
public void onClick(View v) {
     switch (v.getId()){
    case R.id.btndelete:
    Toast.makeText(getActivity(),"btndelete clicked",Toast.LENGTH_LONG);
    break;

}

还尝试将implements View.OnClickListener替换为implements OnClickListener

确保btndelete

上有fragment_side_panel.xml个ID
相关问题