2010-08-17 2 views
0

У меня есть представление, в котором пользовательский массив ArrayAdapter является списком. Клиент является Poco:Android Как получить позицию строки в ListView из onClickHandler()

public class Customer { 
    public String LastName; 
    public boolean IsActive; 
} 

Что работает: я sucesfully связан мой ArrayList в моей ListView, то LastName отображается в виде текста и CheckBox проверяется или нет (в зависимости от IsActive), но теперь я хочу обновить ArrayList каждый раз флажок установлен, но я не могу получить доступ к позиции в OnClickListener:

setListAdapter(new ArrayAdapter<Customer>(this, android.R.layout.simple_list_item_checked, items) { 

    @Override 
    public View getView(int position, View convertView, ViewGroup parent) { 

     View row; 
     if (null == convertView) { 
      row = mInflater.inflate(android.R.layout.simple_list_item_checked, null); 
     } else { 
      row = convertView; 
     } 

     CheckedTextView ctv = (CheckedTextView) row.findViewById(android.R.id.text1); 
     ctv.setText(getItem(position).LastName); 
     ctv.setChecked(getItem(position).IsChecked); 

     ctv.setOnClickListener(new View.OnClickListener() { 

      @Override 
      public void onClick(View v) { 
       CheckedTextView ctv = (CheckedTextView) v; 
       ctv.toggle(); 

       // this does not work because I don't have the position 
       getItem(position).IsChecked = (ctv).isChecked(); 

      } 

     }); 

     return row; 
    } 

}); 

Я думал о наследовании от CheckedTextBox и добавив пользовательское свойство setPosition/getPosition сохранить положение для последующего использования или даже добавить ссылку на связанный объект, но я полагаю, что существует существующее решение Я не могу найти атм.

+0

Вы также можете сохранить позицию в checkedtextview теге. – androidworkz

ответ

1

Я бы обрабатывать щелчок не в ряд, а по ListActivity

public void onListItemClick(ListView l, View v, int position, long id) 

, что дает вам все, что вам нужно. Переопределите метод в ListActivity.

3

Вы должны использовать ListView, чтобы дать ему onItemClickListener и передать ему AdapterView, который будет выглядеть так:

lv.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
public void onItemClick(AdapterView<?> list, View v, int pos, long id) { 
    // here you have th view, the position, everything you need to have fun ;=) 
    //you can acces the content of your adapter here with : 
    mAdapter.getItem(pos); 
    } 
} 
+0

+1 работает, тоже. Но я заставляю Warrens отвечать, потому что использование переопределения сохраняет мне строку кода, потому что мне не нужно делать 'findViewById (...)', чтобы получить мой ListView. И его ответ прошел целую секунду раньше: D –

+0

Это нормально для меня, но вы увидите, что если вы хотите сделать что-то еще в своем ListView, вам все равно придется его называть. Удачи – Sephy

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

  • Нет связанных вопросов^_^