【问题标题】:null pointer on getListView()getListView() 上的空指针
【发布时间】:2011-11-22 19:50:41
【问题描述】:

为什么我在lv = getListView(); 上得到一个空指针?

public class bListFragment extends ListFragment {
static public final String STATE_CHECKED="com.tyczj.bowling.STATE_CHECKED";
OnLongListClickListener mListener;
ListView lv;
String name;
long id;

@Override
public void onCreate(Bundle savedInstanceState){
    super.onCreate(savedInstanceState);

    lv = getListView(); //NullPointerException
    lv.setTextFilterEnabled(true);

    getListView().setChoiceMode(ListView.CHOICE_MODE_SINGLE);
    getListView().setTextFilterEnabled(true);

    getListView().setOnItemLongClickListener(new OnItemLongClickListener() {

        @Override
        public boolean onItemLongClick(AdapterView<?> arg0, View arg1,
                int arg2, long arg3) {

            Vibrator v = (Vibrator)getActivity().getSystemService(getActivity().VIBRATOR_SERVICE);
            v.vibrate(new long [] {0,20,0,0}, -1);
            TextView tv = (TextView)arg1.findViewById(R.id.bListTextView);
            name = tv.getText().toString();
            try{
                id = Integer.parseInt(getRow(name));
                mListener.OnLongListClick(id);
            }catch(CursorIndexOutOfBoundsException e){
                populateList();
            }
            return false;
        }

    });

}

logcat 错误

11-22 12:48:39.170: E/AndroidRuntime(14259): FATAL EXCEPTION: main
11-22 12:48:39.170: E/AndroidRuntime(14259): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.tyczj.bowling/com.tyczj.bowling.Tabs}: java.lang.NullPointerException
11-22 12:48:39.170: E/AndroidRuntime(14259):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1751)
11-22 12:48:39.170: E/AndroidRuntime(14259):    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1767)
11-22 12:48:39.170: E/AndroidRuntime(14259):    at android.app.ActivityThread.access$1500(ActivityThread.java:122)
11-22 12:48:39.170: E/AndroidRuntime(14259):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1005)
11-22 12:48:39.170: E/AndroidRuntime(14259):    at android.os.Handler.dispatchMessage(Handler.java:99)
11-22 12:48:39.170: E/AndroidRuntime(14259):    at android.os.Looper.loop(Looper.java:132)
11-22 12:48:39.170: E/AndroidRuntime(14259):    at android.app.ActivityThread.main(ActivityThread.java:4028)
11-22 12:48:39.170: E/AndroidRuntime(14259):    at java.lang.reflect.Method.invokeNative(Native Method)
11-22 12:48:39.170: E/AndroidRuntime(14259):    at java.lang.reflect.Method.invoke(Method.java:491)
11-22 12:48:39.170: E/AndroidRuntime(14259):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:844)
11-22 12:48:39.170: E/AndroidRuntime(14259):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:602)
11-22 12:48:39.170: E/AndroidRuntime(14259):    at dalvik.system.NativeStart.main(Native Method)
11-22 12:48:39.170: E/AndroidRuntime(14259): Caused by: java.lang.NullPointerException
11-22 12:48:39.170: E/AndroidRuntime(14259):    at com.tyczj.bowling.BowlersListFragment.onCreate(BowlersListFragment.java:29)
11-22 12:48:39.170: E/AndroidRuntime(14259):    at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:702)
11-22 12:48:39.170: E/AndroidRuntime(14259):    at android.app.FragmentManagerImpl.moveToState(FragmentManager.java:926)
11-22 12:48:39.170: E/AndroidRuntime(14259):    at android.app.BackStackRecord.run(BackStackRecord.java:578)
11-22 12:48:39.170: E/AndroidRuntime(14259):    at android.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1226)
11-22 12:48:39.170: E/AndroidRuntime(14259):    at android.app.Activity.performStart(Activity.java:4370)
11-22 12:48:39.170: E/AndroidRuntime(14259):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1724)

【问题讨论】:

    标签: android listview android-fragments


    【解决方案1】:

    查看documentation for ListActivity

    首先你需要一个布局文件(xml 文件),其中包含一个ListView,id 为:android:id="@android:id/list"

    二是你忘记设置Activity的内容视图:

    super.onCreate(savedInstanceState);
    this.setContent(R.layout.yourLayoutWithListView);
    

    【讨论】:

      【解决方案2】:

      可能不正确,但您错过了 setContent 吗?

      super.onCreate(savedInstanceState);
      ??? you must set content XML 
      lv = getListView(); //NullPointerException
      

      这就像使用 TabActivity - 您可以调用 getTabHost 但只有在设置内容 XML 布局定义之后。 试试

      super.onCreate(savedInstanceState);
      **this.setContent(R.layout.mylistviewlayout);**
      lv = getListView(); //NullPointerException
      

      【讨论】:

        【解决方案3】:

        您是否将 com.tyczj.bowling/com.tyczj.bowling.Tabs 活动放在清单文件中??

        【讨论】:

          【解决方案4】:

          如果您使用的是 ListFragment,您可能需要将 onCreate 更改为:

          @Override
          public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
          

          然后

          @Override
          public void onActivityCreated(Bundle savedInstanceState) {
              super.onActivityCreated(savedInstanceState);
          
              lv = getListView(); // here it is available
          }
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2020-05-25
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2021-01-19
            • 2019-07-18
            相关资源
            最近更新 更多