void является недопустимым типом для переменной onListItemClick?

1

Я пытаюсь настроить простой onClickListener на андроидную активность, которая расширяет ListActivity.

Внутри этих классов при создании метода я создаю объект spinner, который, когда пользователь выбирает элемент, создается элемент списка arrayAdapter, в зависимости от того, какой пользователь выбрал (заполненный запросом курсора). Это генерируется в рамках другого метода в пределах одного класса.

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.

Multiple markers at this line
- Syntax error on token ")", ; expected
- Syntax error on token ",", ; expected
- Duplicate local variable position
- Syntax error on token ",", ; expected
- Duplicate local variable id
- Duplicate local variable l
- Syntax error on token "(", ; expected
- Duplicate local variable v
- Syntax error on token ",", ; expected
- 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
    пожалуйста, предоставьте (точный) код перед этим методом
  • 0
    Я согласен с MByD - похоже, это проблема с несбалансированными разделителями (скобками или скобками) где-то над этим кодом.
Теги:
android-arrayadapter

2 ответа

5

Объявления метода должны быть сделаны в контексте определения класса. При попытке объявить метод внутри другого метода сообщается об ошибках, подобных этому.

  • 1
    Благодаря вашим комментариям я удалил прослушиватель кликов из существующего метода, и теперь он работает правильно - спасибо, что указал мне правильное направление!
0

Я просто получил эту ошибку от попытки поместить обработчик OnClick в метод MenuItem, поэтому проверьте, что вы находитесь за пределами MenuItem.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню