Android как мне получить положение строки в ListView из onClickHandler () - PullRequest
0 голосов
/ 17 августа 2010

У меня есть представление, которое имеет собственный ArrayAdapter в качестве ListAdapter. Клиент - это Poco:

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

Что работает: я успешно связал свой ArrayList с моим ListView, LastName отображается в виде текста и флажок установлен или нет (в зависимости от 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, чтобы сохранить позицию для последующего использования или даже добавить ссылку на связанный объект, но я полагаю, что существует существующее решение, которое я не могу найти в банкомате.

Ответы [ 2 ]

4 голосов
/ 17 августа 2010

Вы должны использовать 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);
    }
}
1 голос
/ 17 августа 2010

Я бы обработал щелчок не по строке, а по ListActivity

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

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

...