2015-10-08 72 views
0

我知道有很多類似的問題,併發誓我已經嘗試過所有這些。 我正在存儲一個字符串和數據庫,並希望檢索它作爲列表。這已經完成使用ListAdapter(我遵循ToDo列表教程)。ListView不能使用SimpleCursorAdapter和ListAdapter

問題是,我想實施OnItemClickListener這個列表已經從數據庫中檢索。但是當我用ListView替換ListAdapter時,該應用程序開始與NullPointException一起崩潰。

下面是代碼:

public class OfflineActivity extends ListActivity { 
private ListAdapter listAdapter; 
private TaskDBHelper helper; 
ListView listView; 


@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.offline_list); 
    updateUI(); 

} 

private void updateUI() { 
    helper = new TaskDBHelper(OfflineActivity.this); 
    SQLiteDatabase sqlDB = helper.getReadableDatabase(); 
    Cursor cursor = sqlDB.query(TaskContract.TABLE, 
      new String[]{TaskContract.Columns._ID, TaskContract.Columns.TASK}, 
      null, null, null, null, null); 

    listAdapter = new SimpleCursorAdapter(
      this, 
      R.layout.offline_item, 
      cursor, 
      new String[]{TaskContract.Columns.TASK}, 
      new int[]{R.id.taskTextView}, 
      0 
    ); 

listView = (ListView) findViewById(R.id.list); 
this.setListAdapter(listAdapter); 
listView.setAdapter(listAdapter); 
} 
} 

該應用程序運行正常,直到我把listView.setAdapter(listAdapter);。是否有某種方式可以實現OnItemClickListener,而不會對代碼做任何更改。

下面是XML文件:

offline_list.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:orientation="vertical" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent" 
> 
<ListView 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:id="@android:id/list" 
    android:layout_weight="1" /> 

offline_item.xml

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout 
android:layout_width="fill_parent" 
android:layout_height="fill_parent" 
xmlns:android="http://schemas.android.com/apk/res/android"> 

<TextView 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:text="New Text" 
    android:id="@+id/taskTextView" /> 

PS。我相信listAdapter不是空的..如果我不添加最後一行,那麼list確實會被填充。自2天以來一直停留在它上面。 plssss的幫助

回答

0

目前,你聲明一個listView,但你永遠不會給它分配一個值。 在設置適配器之前,您需要將您的listView綁定到佈局。

listView = (ListView) findViewById(R.id.list); 
this.setListAdapter(listAdapter); 
listView.setAdapter(listAdapter); 
+0

燁...抱歉..試過,以及..但同樣'NullPointException'錯誤 –

0

當你的OfflineActivity延伸ListActivity和您正確給你ListView ID作爲@android:id/list,你不需要通過findViewById(R.id.list)引用您的ListView,因爲這將是默認情況下的ListActivity實施引用。因此,沒有必要對兩行:

listView = (ListView) findViewById(R.id.list); 
listView.setAdapter(listAdapter); 

事實上,this.setListAdapter(listAdapter);是您的適配器連接到您的ListView。 爲了實現OnClickListener您的名單只是簡單地覆蓋的ListActivityonListItemClick()如下:

OfflineActivity

public class OfflineActivity extends ListActivity { 
... 

@Override 
public void onCreate(Bundle savedInstanceState) { 
... 
} 

@Override 
    public void onListItemClick(ListView l, View v, int position, long id) { 
    // TODO implement your logic 
    } 

} 
相關問題