2011-05-16 71 views
1

我一直在試圖設置一個簡單的onClickListener對Android活動的延伸ListActivityvoid是變量onListItemClick的無效類型?

在創建方法的這些類中,我創建了一個微調對象,當用戶選擇一個項目時,根據用戶選擇的內容(從遊標請求填充)創建一個列表項目。這是在同一個類中的另一個方法內生成的。

ArrayAdapter<String> playerAdapter = new ArrayAdapter<String>(this, 
      R.layout.match_update_rows, R.id.player_name, playerItems); 

    setListAdapter(playerAdapter); 

我想在這個新列表中添加一個點擊監聽器。我已經加入:

@Override 
    protected void onListItemClick(ListView l, View v, int position, long id) { 
     super.onListItemClick(l, v, position, id); 
     Intent i = new Intent(this, PlayerFixtureScore.class); 
     i.putExtra("RowId", id); 
     startActivity(i); 
    } 

不過,我對protected void onListItemClick線得到一個錯誤。如果我選擇onListItemClick行,Eclipse說'void is an invalid type for the variable onListItemClick'?如果我選擇onListItemClick行,Eclipse說'void is an invalid type for the variable onListItemClick'

所有的作品,如果我刪除點擊監聽器代碼,只是不能解決如何添加監聽器在arrayAdapter項目,所以我可以告訴用戶點擊了哪個項目 - 任何幫助表示讚賞!

按照MyD的要求 - 這是完整的課程列表: 感謝您的及時回覆。在回覆MByD這裏是這個類的完整代碼清單。任何建議感激!

public class MatchUpdate extends ListActivity { 
/** Called when the activity is first created. */ 
private int cursorCounter = 0; 
private int spinnerSelected; 
/** Set up the db for inital use */ 
DataBaseHelper myDbHelper = new DataBaseHelper(this); 
Match match; 

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

    try { 
     myDbHelper.createDataBase(); 
    } catch (IOException ioe) { 
     throw new Error("Unable to create database"); 
    } 
    try { 
     myDbHelper.openDataBase(); 
    } catch (SQLException sqle) { 
     throw sqle; 
    } 

    // create a spinner for fixture selection 
    Spinner fixtureSpin = (Spinner) findViewById(R.id.fixtures); 

    // Get all fixtures for Spinner... 
    Cursor cur = myDbHelper.getFixtures(); 

    // create match object for cursor results 
    match = new Match(cur.getCount()); 

    // Populate match object with Cursor results 
    for (cur.moveToFirst(); !cur.isAfterLast(); cur.moveToNext()) { 
     match.setFixtureId(cursorCounter, cur.getInt(0)); 
     match.setHomeId(cursorCounter, cur.getInt(1)); 
     match.setHomeTeam(cursorCounter, cur.getString(2)); 
     match.setAwayId(cursorCounter, cur.getInt(3)); 
     match.setAwayTeam(cursorCounter, cur.getString(4)); 
     match.setDate(cursorCounter, cur.getString(5)); 
     cursorCounter++; 
    } 

    // Set up adapters for fixture spinner 
    ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, 
      android.R.layout.simple_spinner_item, match.getFixtureList()); 

    adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 

    // Set up fixture spinner 
    fixtureSpin.setAdapter(adapter); 

    // Set fixture spinner listener 
    fixtureSpin.setOnItemSelectedListener(new MyOnItemSelectedListener()); 

} 

public class MyOnItemSelectedListener implements OnItemSelectedListener { 

    public void onItemSelected(AdapterView<?> parent, View view, int pos, 
      long id) { 
     spinnerSelected = parent.getSelectedItemPosition(); 
     updatePlayers(match); 
    } 

    public void onNothingSelected(AdapterView<?> parent) { 
     // Do nothing. 
    } 
} 

public void updatePlayers(Match thisMatch) { 

    // Get players for selected fixture based on Spinner selection 
    Cursor playerCur = myDbHelper.getFixturePlayers(
      thisMatch.getHomeId(spinnerSelected), 
      thisMatch.getAwayId(spinnerSelected)); 

    // set up simple ArrayAdapter to hold player names 
    String[] playerItems; 
    playerItems = new String[playerCur.getCount()]; 
    int cnt = 0; 

    // pull player data from cursor, into a simple array 
    for (playerCur.moveToFirst(); !playerCur.isAfterLast(); playerCur 
      .moveToNext()) { 
     playerItems[cnt] = playerCur.getString(0); 
     cnt++; 

    } 

    ArrayAdapter<String> playerAdapter = new ArrayAdapter<String>(this, 
      R.layout.match_update_rows, R.id.player_name, playerItems); 

    setListAdapter(playerAdapter); 

    @Override 
    protected void onListItemClick(ListView l, View v, int position, long id) { 
     super.onListItemClick(l, v, position, id); 
     Intent i = new Intent(this, PlayerFixtureScore.class); 
     i.putExtra("RowId", id); 
     startActivity(i); 
    } 
} 

} 
+0

請在此方法之前提供(確切)代碼 – MByD 2011-05-16 20:29:59

+0

我同意MByD - 這似乎是在代碼上方某處不平衡分隔符(大括號或括號)的問題。 – 2011-05-16 20:41:41

回答

5

方法聲明需要在類定義的上下文中進行。當試圖在另一個方法中聲明一個方法時,會報告與此類似的錯誤。

+1

感謝您的意見,我已將點擊偵聽器移出現有方法,現在它可以正常工作 - 感謝您指引我朝着正確的方向發展! – Joe 2011-05-17 18:30:21

0

我剛剛得到這個錯誤,試圖將OnClick處理程序放入MenuItem方法中,因此請檢查您是否位於MenuItem之外。

相關問題