2012-07-06 59 views
0

我遇到了第一個Android應用程序的問題。Android:onListItemClick未在ListActivity中調用

我有子類ListActivity,我沒有運氣得到重寫的onListItemClick()來響應點擊事件。我讀過焦點可能是一個問題,但改變XML文件中的焦點似乎並不奏效。這是相關的代碼位。任何人都可以看到我發現了什麼?

public class Notepadv1 extends ListActivity { 
    private int mNoteNumber = 1; 
    private NotesDbAdapter mDbHelper; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.notepad_list); 
     mDbHelper = new NotesDbAdapter(this); 
     mDbHelper.open(); 
     fillData(); 
    } 

private void fillData() { 
    // Get all of the notes from the database and create the item list 
    Cursor c = mDbHelper.fetchAllNotes(); 
    startManagingCursor(c); 

    String[] from = new String[] { NotesDbAdapter.KEY_TITLE }; 
    int[] to = new int[] { R.id.text1 }; 


    SimpleCursorAdapter notes = 
     new SimpleCursorAdapter(this, R.layout.notes_row, c, from, to); 
    setListAdapter(notes); 
} 

@Override 
public void onListItemClick (ListView l, View v, int position, long id){ 
    super.onListItemClick(l, v, position, id); 

    AlertDialog alert = new AlertDialog.Builder(this).create(); 
    String message = "row clicked!"; 
    alert.setMessage(message); 
    alert.show(); 

} 

notepad_list.xml

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

    <ListView 
     android:id="@android:id/list" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:dividerHeight="6dp"/> 



    <TextView android:id="@android:id/empty" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="@string/no_notes" /> 

</LinearLayout> 

而且notes_row.xml

<?xml version="1.0" encoding="utf-8"?> 
<TextView android:id="@+id/text1" 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="wrap_content" 
    android:layout_height="60dp" 
    android:focusable="false"/> 

回答

2

我創建了一個ListActivity,使用了onListItemClick和notes_row.xml。該代碼適用於我。但是,我相信你期望整行響應一個點擊,根據notes_row你需要點擊文本本身(不在行中的任何地方)。

嘗試改變notes_row.xml寬度屬性"match_parent"

<TextView xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/text1" 
    android:layout_height="60dp" 
    android:layout_width="match_parent" 
    android:focusable="false" /> 

現在整個行來響應用戶點擊。

+0

哈哈!非常感謝。我是一個笨蛋。點擊文字現在工作正常。乾杯! – nrhorner 2012-07-06 21:15:04

0

器具OnItemClickListener做list.setOnItemClickListener。

public class Notepadv1 extends ListActivity implements OnItemClickListener { 

    onCreate() 
    { 
     .... 

     ((ListView)findViewById(android.R.id.list)).setOnItemClickListener(this) 

    } 

} 
+1

作者正在擴展一個ListActivity,覆蓋[onListItemClick()](http://developer.android.com/reference/android/app/ListActivity.html#onListItemClick%28android.widget.ListView,%20android.view。查看,%20int,%20long%29)是更好的方法,因爲它已經實施。 – Sam 2012-07-06 20:52:03

+0

謝謝。我嘗試過,但恐怕沒有用。然而就在我嘗試之前,在電話顯示暫停播放一段時間之後,我彈出對話框顯示成功。不能重複它。 – nrhorner 2012-07-06 20:57:56

2

另一個可能的解決方案,以幫助任何人:我在每個列表項中都有一個按鈕,並且這阻止了我的onListItemClick事件觸發。用一個看起來完全一樣的TextView替換Button使它工作。

+0

僅供參考:這不僅出現在按鈕上,而且出現了設置了「背景」的TextViews。我用'focusable =「false」'來解決它。 – 2013-10-13 22:24:37

相關問題