0

Я знаю, что есть много вопросов, подобных этому, и клянусь, что я попробовал их все. Я сохраняю строку и базу данных и хочу получить ее в виде списка. Это было выполнено с использованием ListAdapter (я следил за учебником ToDo List).ListView не работает с SimpleCursorAdapter и ListAdapter

Проблема в том, что я хочу реализовать OnItemClickListener для этого списка, который был получен из БД. Но в тот момент, когда я заменяю ListAdapterListView, приложение начинает сбой 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 не пуст .. coz list действительно заселяется, если я не добавлю последнюю строку. застрял на нем с 2 дней. plssss help

ответ

0

В настоящее время вы объявляете listView, но никогда не присваиваете ему значение. Перед настройкой адаптера вам необходимо привязать свой списокView к макету.

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

да ... извините .. пытался что хорошо .. но это же 'NullPointException' ошибка –

0

Как ваш OfflineActivity расширяет ListActivity и вы правильно дали свой ListView идентификатора, как @android:id/list, вам не нужно ссылаться на ваш ListView по findViewById(R.id.list), потому что он будет на ссылках по умолчанию в реализации ListActivity. Поэтому нет необходимости в двух линиях:

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

В самом деле, this.setListAdapter(listAdapter); не прикрепляет ваш адаптер к ListView. Для реализации OnClickListener для списка просто перезаписать onListItemClick() из ListActivity следующим образом:

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 
    } 

} 
Смежные вопросы