【问题标题】:NullPointerException trying to set listView to clickableNullPointerException 试图将 listView 设置为可点击
【发布时间】:2023-03-19 23:24:01
【问题描述】:

我在我的 Android 应用程序中遇到 NullPointerException,据我从 LogCat 得知,这是在尝试将列表视图设置为可点击时发生的。这是我的代码。

public class MyActivity extends Activity {
private ListView lstView = (ListView) findViewById(R.id.listView1);
private SQLiteDatabase database;

private static final String fields[] = { "field1", "field2", "field3" };


/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {

    CursorAdapter dataSource;
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    //lstView.setClickable(true);   
private static final String fields[] = { "field1", "field2", "field3" };


/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    CursorAdapter dataSource;
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    lstView.setClickable(true);

    DatabaseHelper helper = new DatabaseHelper(this);
    database = helper.getWritableDatabase();
    Cursor data = database.query("mydb", fields, null, null, null, null, null);
    dataSource = new SimpleCursorAdapter(this, R.layout.row, data, fields, new int[] {R.id.field1, R.id.field2});
    database.close();
    lstView.setOnItemClickListener(new AdapterView.OnItemClickListener() {

          @Override
          public void onItemClick(AdapterView<?> arg0, View arg1, int position, long arg3) {
            Intent newActivity = new Intent(getApplicationContext(), NewIntent.class);
            newActivity.putExtra("itemId",lstView.getItemIdAtPosition(position));
            // start activity
            startActivity(newActivity);
          }
        });

}


}

这是 LogCat 输出

01-10 14:03:53.740: E/AndroidRuntime(30361): FATAL EXCEPTION: main
01-10 14:03:53.740: E/AndroidRuntime(30361): java.lang.RuntimeException: Unable to start activity ComponentInfo{app.jonward.myapp/app.jonward.myapp.MyActivity}: java.lang.NullPointerException
01-10 14:03:53.740: E/AndroidRuntime(30361):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1821)
01-10 14:03:53.740: E/AndroidRuntime(30361):    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1842)
01-10 14:03:53.740: E/AndroidRuntime(30361):    at android.app.ActivityThread.access$1500(ActivityThread.java:132)
01-10 14:03:53.740: E/AndroidRuntime(30361):    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1038)
01-10 14:03:53.740: E/AndroidRuntime(30361):    at android.os.Handler.dispatchMessage(Handler.java:99)
01-10 14:03:53.740: E/AndroidRuntime(30361):    at android.os.Looper.loop(Looper.java:150)
01-10 14:03:53.740: E/AndroidRuntime(30361):    at android.app.ActivityThread.main(ActivityThread.java:4263)
01-10 14:03:53.740: E/AndroidRuntime(30361):    at java.lang.reflect.Method.invokeNative(Native Method)
01-10 14:03:53.740: E/AndroidRuntime(30361):    at java.lang.reflect.Method.invoke(Method.java:507)
01-10 14:03:53.740: E/AndroidRuntime(30361):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:839)
01-10 14:03:53.740: E/AndroidRuntime(30361):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:597)
01-10 14:03:53.740: E/AndroidRuntime(30361):    at dalvik.system.NativeStart.main(Native Method)
01-10 14:03:53.740: E/AndroidRuntime(30361): Caused by: java.lang.NullPointerException
01-10 14:03:53.740: E/AndroidRuntime(30361):    at  app.jonward.castr.CastrActivity.onCreate(MyActivity.java:31)
01-10 14:03:53.740: E/AndroidRuntime(30361):    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1072)
01-10 14:03:53.740: E/AndroidRuntime(30361):    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1785)
01-10 14:03:53.740: E/AndroidRuntime(30361):    ... 11 more

LogCat所说的导致异常的MyActivity第31行的代码是

lstView.setClickable(true);

已修复 这是工作代码。有一些变化。 公共类 MyActivity 扩展 ListActivity { 私有 SQLiteDatabase 数据库; 私有静态最终字符串字段[] = { "field1", "field2", "_id" };

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {

    CursorAdapter dataSource;
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    DatabaseHelper helper = new DatabaseHelper(this);
    database = helper.getWritableDatabase();
    Cursor data = database.query("castr", fields, null, null, null, null, null);
    dataSource = new SimpleCursorAdapter(this, R.layout.row, data, fields, new int[] {R.id.field1, R.id.field2});
    final ListView view = getListView();

    view.setHeaderDividersEnabled(true);
    view.addHeaderView(getLayoutInflater().inflate(R.layout.row, null));

    database.close();

    view.setOnItemClickListener(new AdapterView.OnItemClickListener() {

          @Override
          public void onItemClick(AdapterView<?> arg0, View arg1, int position, long arg3) {

            // Prepare intent
            Intent newActivity = new Intent(getApplicationContext(), NewActivity.class);
            newActivity.putExtra("itemId",view.getItemIdAtPosition(position));
            // start activity
            startActivity(newActivity);
          }
        });

}
}

【问题讨论】:

    标签: android listview nullpointerexception


    【解决方案1】:

    您应该从布局中获取 listView 引用。可能使用这样的东西..

    listView = (ListView)findViewById(R.id.nameofyourlistView);
    

    然后将 listView 设置为可点击。

    另一方面,为什么要将列表视图设置为可点击?你不必这样做,默认情况下列表项是可点击的。

    【讨论】:

    • 好的,所以在删除 lstView.setClickable(true) 行后,我现在在列表视图本身的声明中遇到错误。私有 ListView lstView = (ListView) findViewById(R.id.listView1);请注意,它位于滚动视图内的另一个线性布局内。这可能会破坏工作吗?
    • 我的 listViews 总是在 LinearLayout 的内部。你不需要滚动视图。当屏幕被填满时,ListView 会自动滚动。
    • @Carnivoris 我怀疑您是否可以在 onCrete() 运行之前声明一个视图。尝试在 setContentView() 调用之后移动 onCreate() 内的声明行。
    • 我明白了。我完全删除了滚动视图并将 ListView 放在 onCreate() 中。那里还有其他一些错误的代码,但我终于把它修好了。谢谢大家 :) 我现在会为将来遇到相同问题的任何人发布好的代码。
    【解决方案2】:

    使用前需要初始化ListView。

    lstView= (ListView) findViewById(R.id.your_listview_id);
    

    【讨论】:

      猜你喜欢
      • 2013-07-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-03
      • 1970-01-01
      • 2019-02-27
      相关资源
      最近更新 更多