Как реализовать другое поведение, когда пользователь нажимает на разные представления в ListView?

StackOverflow https://stackoverflow.com/questions/6392788

Вопрос

Я новичок в разработке Android, поэтому это простой вопрос.

Я хотел бы реализовать то же поведение, что и в приложении "Контакты".У вас есть ListView с рядом контактов |телефонные иконки.Здесь у вас есть одно поведение, когда вы нажимаете на имя контакта, и другое поведение, когда вы нажимаете на значок телефона.

Вот мой код. Любая помощь приветствуется.

Итак, что не так в подходе

переключатель (v.getId ()) { case R.id.imageButtonAction:

Класс активности

общий

Активность xml

общий

Строка xml

public class CompaniesActivity extends Activity  {

MyApp app;

ListView listCompanies;

Cursor cursor;

// Adapter and its corresponding FROM and TO statements. The number and sequence of the arguments must match in FROM / TO arguments.
SimpleCursorAdapter adapter;
static final String[] FROM = { MenuNavigationData.C_COMPANY, MenuNavigationData.C_DESCRIPTION};
static final int[] TO = { R.id.textCompany, R.id.textDescription }; //

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.companies);

    //Gets a reference to the application
    app = (MyApp) getApplication();

    // Find your views
    listCompanies = (ListView) findViewById(R.id.listCompanies);

    addButton = (Button) findViewById(R.id.buttonAdd);

    // Add actions to user interaction
    listCompanies.setOnItemClickListener(new OnItemClickListener() {
        @Override
        **public void onItemClick(AdapterView<?> arg0, View v, int position, long id) {


            switch (v.getId()) {
                case R.id.imageButtonAction:
                    startActivity(new Intent(app, InstructionsActivity.class));
                    break;
                default:
                    int i = adapter.getItemViewType(position);
                    startActivity(new Intent(app, EditMenuNavigationActivity.class));
                    break;
            }**

        }
    });

}
Это было полезно?

Решение 2

Новый гораздо лучший подход для элегантного решения этой проблемы с меньшим количеством кода !!!

Со следующими изменениями пользовательский интерфейс стал намного более отзывчивым, больше нет проблем с двойным щелчком.:)

Намного меньше кода, который просто работает!

Изменения в строке xml

Вставьте линейный макет, чтобы обернуть оба В этом линейном макете вставьте тег с именем android: onClick="editCompanyClick" Это обработчик кликов, который будет вызываться в Activity.

Вставьте линейный макет, чтобы обернуть В этом линейном макете вставьте тег с именем android: onClick="dialClick" Это обработчик кликов, который будет вызываться в Activity.

Изменения класса активности

Удалите предыдущий код

общий

Вставьте код

общий

Строка xml

общий

Другие советы

Обратный вызов onItemClick () получает как конкретное представление, так и его позицию (с отсчетом от 0), каждый из которых может помочь вам решить, какое представление было выбрано.Позиция - это индекс добавленных вами элементов, и для более сложных сценариев вы можете просмотреть.setTag (Object o) и использовать getTag () для получения его из вашего обратного вызова.

Я наконец нашел решение. Это решает проблему.Но добавляет еще одно.Как и ожидалось, ListView теперь ведет себя по-другому, когда пользователь нажимает на разные представления (TextView или ImageView). Но кажется, что он не отвечает.Мне нужно «дважды щелкнуть», чтобы вызвать либо company.setOnClick, либо dial.setOnClick.Есть предложения?

// Добавляем действия к взаимодействию с пользователем

общий
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top