2011-01-20 3 views
0

Я показываю некоторые данные sql в списке через ListAdapter. Все работает отлично, за исключением случаев, когда я пытаюсь установить прослушиватель кликов для каждого элемента в списке. Ничего не происходит, когда я нажимаю на любой из элементов; нет сообщений об ошибках, он просто терпит неудачу.android onItemClick не работает

public class Notes extends ListActivity implements OnClickListener { 
    private static final String TAG = "Notes"; 
    private NotesData notes; 

    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
     notes = new NotesData(this); 
     try { 
      Cursor cursor = getNotes(); 
      showNotes(cursor); /* set the cursor to the listadapter */ 
      ListView ls = (ListView) findViewById(android.R.id.list); 
      ls.setOnItemClickListener(new OnItemClickListener() { 
       public void onItemClick(AdapterView<?> parent,View v, 
        int position,long id) { 
        Toast.makeText(getApplicationContext(),"clicked", 
         Toast.LENGTH_SHORT).show(); 
       } 
      }); 
     } finally { 
      notes.close(); 
     } 

    } 

main.xml, содержащий ListView:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:orientation="vertical" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent"> 
<Button 
android:id="@+id/new_note_button" 
android:layout_height="wrap_content" 
android:layout_width="fill_parent" 
android:text="@string/new_note"/> 
<ListView 
android:id="@android:id/list" 
android:layout_width="wrap_content" 
android:layout_height="wrap_content" /> 
<TextView 
    android:id="@+id/empty" 
    android:layout_height="wrap_content" 
    android:layout_width="wrap_content" 
    android:text="@string/empty"/> 
</LinearLayout> 

Есть ли что-то я не хватает?

+0

также проверьте, чтобы в вашем представлении списка было включено, доступно для подключения и настраивается. –

+0

FYI 'android: id =" @ + id/empty "' должен быть 'android: id =" @ android: id/empty "' – idbrii

+0

onItemClick не вызывается. и настройка списка для кликабельного и фокусируемого не помогла. – herpderp

ответ

0

Ничего не хватает, ваш код полностью верен, просто замените getApplicationContext() на «это», возможно, решите проблему, поскольку то, что вам нужно передать, - это ссылка на контекст текущего компонента, а не контекста текущего процесса.

Надеюсь, это поможет. Hass.

+0

Нужно ли быть «Notes.this»? – idbrii

+0

ну, это не проблема с вызовом makeText, так как раньше у меня был простой вызов Log.d на его месте, и это тоже не сработало. – herpderp

0

Я думаю, что ваш элемент списка настроен на кликабельность. (view.setClickable (true))

onItemClick будет вызываться, когда элемент списка можно щелкнуть.

-1

Я бы рекомендовал бросать что-то подобное в вашей Ьгу заявлении

try{ 
    //yourstuff 
} catch (Exception e) { 
    e.printStackTrace(); 
} 

А затем проверьте, чтобы увидеть, что сообщение об ошибке брошено. Возможно, что он выдает ошибку, когда он устанавливает onClickListener, возможно, что-то недействительно, но пока все это в заявлении try, оно не даст вам полезного сообщения об ошибке. Таким образом, вы также можете просто вытащить столько из инструкции try насколько возможно, пока не найдете проблему. :-)

0

Вам нужно добавить android:focusable="false" к кнопке у вас в файле main.xml. Кнопка отводит фокус от элемента списка.

Это решит вашу проблему.

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