Как реализовать другое поведение, когда пользователь нажимает на разные представления в ListView?
-
29-10-2019 - |
Вопрос
Я новичок в разработке 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.Есть предложения?
// Добавляем действия к взаимодействию с пользователем
общий