Итак, скажем, у вас есть Activity AB, который контролирует Frag A и Fragment B. Внутри фрагмента A вам нужен интерфейс, который может реализовать Activity AB. В примере кода android у них есть:
private Callbacks mCallbacks = sDummyCallbacks;
/ * Интерфейс обратного вызова, который должен реализовывать все действия, содержащие этот фрагмент. Этот механизм позволяет уведомлять действия о выборе элементов. * /
public interface Callbacks {
/*Callback for when an item has been selected. */
public void onItemSelected(String id);
}
/*A dummy implementation of the {@link Callbacks} interface that does nothing. Used only when this fragment is not attached to an activity. */
private static Callbacks sDummyCallbacks = new Callbacks() {
@Override
public void onItemSelected(String id) {
}
};
Интерфейс обратного вызова помещен в один из ваших фрагментов (скажем, фрагмент A). Я думаю, что цель этого интерфейса Callbacks - как вложенный класс внутри Frag A, который может реализовать любая активность. Так, если Fragment A был телевизором, CallBacks - это ТВ-пульт (интерфейс), который позволяет Фрагменту A использовать Activity AB. Возможно, я ошибаюсь в деталях, потому что я нооб, но у меня есть программа, которая отлично работает на всех размерах экрана, и это то, что я использовал.
Итак, внутри фрагмента A мы имеем: (I взяли это из программных приложений Android)
@Override
public void onListItemClick(ListView listView, View view, int position, long id) {
super.onListItemClick(listView, view, position, id);
// Notify the active callbacks interface (the activity, if the
// fragment is attached to one) that an item has been selected.
mCallbacks.onItemSelected(DummyContent.ITEMS.get(position).id);
//mCallbacks.onItemSelected( PUT YOUR SHIT HERE. int, String, etc.);
//mCallbacks.onItemSelected (Object);
}
И внутри Activity AB мы переопределим метод onItemSelected:
public class AB extends FragmentActivity implements ItemListFragment.Callbacks {
//...
@Override
//public void onItemSelected (CATCH YOUR SHIT HERE) {
//public void onItemSelected (Object obj) {
public void onItemSelected(String id) {
//Pass Data to Fragment B. For example:
Bundle arguments = new Bundle();
arguments.putString(“FragmentB_package”, id);
FragmentB fragment = new FragmentB();
fragment.setArguments(arguments);
getSupportFragmentManager().beginTransaction().replace(R.id.item_detail_container, fragment).commit();
}
Итак, внутри Activity AB вы в основном бросаете все в Bundle и передавая его B. Если вы не уверены, как использовать Bundle, посмотрите класс вверх.
Я в основном придерживаюсь образца кода, который предоставил Android. Тот, у кого есть материал DummyContent. Когда вы создаете новый пакет приложений для Android, он называется MasterDetailFlow.
Оператор
void
оценивает данный выражение, а затем возвращаетundefined
.Оператор
void
часто используется просто для получения примитиваundefined
значение, обычно используя «void (0)
» (который эквивалентно «void 0
»). В этих случаях вместо этого можно использовать глобальную переменнуюundefined
(при условии, что она не был назначен нестандартным значение).
Здесь приводится объяснение: void
operator .
Причина, по которой вы хотите сделать это с помощью href
ссылки, заключается в том, что обычно URL javascript:
перенаправляет браузер на текстовую версию результата оценки этого JavaScript. Но если результат undefined
, тогда браузер останется на той же странице. void (0)
- это всего лишь короткий и простой скрипт, который оценивается как undefined
.
Вы всегда должны иметь href в ваших тегах a . Вызов функции JavaScript, которая возвращает undefined, подойдет. То же самое и со ссылкой на '#'.
К тегам привязки в Internet Explorer 6 без href не применяется стиль a: hover
.
Да, это ужасное и незначительное преступление против человечности , но опять же, как и Internet Explorer 6.
Надеюсь, это поможет.
Internet Explorer 6 на самом деле является серьезным преступлением против человечества.
ОГРОМНАЯ разница в поведении "#" и javascript: void
"#" прокручивает вас в ВЕРХ страницы в то время как "javascript: void (0);" нет.
Это очень важно, если вы кодируете динамические страницы. пользователь не хочет возвращаться наверх только потому, что щелкнул ссылку на странице.
Значит, ничего не будет. Это попытка сделать так, чтобы ссылка никуда не «перемещалась». Но это неправильный путь.
На самом деле вы должны просто вернуть false
в событии onclick
, например так:
<a href="#" onclick="return false;">hello</a>
Обычно он используется, если ссылка выполняет какой-то 'JavaScript -y 'вещь. Например, отправка формы AJAX, замена изображения или что-то еще. В этом случае вы просто выполняете любую вызываемую функцию return false
.
Однако, чтобы сделать ваш веб-сайт совершенно потрясающим, обычно вы включаете ссылку, которая выполняет то же действие, если человек, просматривающий его предпочитает не запускать JavaScript.
<a href="backup_page_displaying_image.aspx"
onclick="return coolImageDisplayFunction();">hello</a>
В дополнение к техническому ответу, javascript: void
означает, что автор делает это неправильно.
Нет веских причин использовать javascript:
псевдо-URL (*). На практике это вызовет путаницу или ошибки, если кто-то попробует такие вещи, как «ссылка на закладку», «открыть ссылку в новой вкладке» и т. Д. Это происходит довольно часто, теперь люди привыкли к средней щелчке для новой вкладки: это похоже на ссылку, вы хотите прочитать ее в новой вкладке, но оказывается, что это совсем не настоящая ссылка, и дает нежелательные результаты, такие как пустая страница или ошибка JS при щелчке средней кнопкой мыши.
- распространенная альтернатива, которая, возможно, может быть менее плохой. Однако вы должны не забывать возвращать false
из обработчика событий onclick
, чтобы предотвратить переход по ссылке и прокрутку вверх страницы.
В некоторых случаях может возникнуть ошибка фактическое полезное место, на которое можно указать ссылку. Например, если у вас есть элемент управления, при нажатии на который открывается ранее скрытый В противном случае, если ссылка указывает только на какой-то скрипт, на самом деле это не ссылка, и его не следует размечать как таковую. Обычный подход - добавить Недостатком этого является то, что вы теряете управление с клавиатуры, так как вы не можете перейти на span / div / bare-a или активировать его с помощью пробела . Является ли это недостатком на самом деле, зависит от того, какое действие должен выполнять элемент. Вы можете, приложив некоторые усилия, попытаться имитировать взаимодействие с клавиатурой, добавив к элементу Если вам действительно нужен элемент, который не является ссылкой, но который может быть активирован как обычно с помощью мыши или клавиатуры, что вы want - это (*: во всяком случае, при создании сайта. Очевидно, они полезны для букмарклетов.
ссылку на него. Или, если есть способ сделать то же самое не с использованием JavaScript (например, 'thispage.php? Show = foo', который устанавливает foo видимым для начала), вы можете ссылаться на него.
onclick
к
,
без href
и стилизуйте его так, чтобы было понятно, что вы можете щелкнуть по нему. Это то, что StackOverflow [сделал на момент написания; теперь он использует href = "#"
].
tabIndex
и прослушивая нажатие клавиши пробела. Но он никогда не сможет на 100% воспроизвести реальное поведение браузера, не в последнюю очередь потому, что разные браузеры могут по-разному реагировать на клавиатуру (не говоря уже о невизуальных браузерах).
(или
так же хорошо для простого текстового содержимого). Вы всегда можете использовать CSS, чтобы изменить его стиль, чтобы он больше походил на ссылку, чем на кнопку, если хотите. Но поскольку он ведет себя как кнопка, именно так вы должны его разметить. javascript:
псевдо-URL являются концептуальным причудливость: локатор, который не указывает на местоположение, а вместо этого вызывает активный код внутри текущего местоположения.