Вы можете использовать ClickableSpan , как описано в этой записи
TextView myTextView = new TextView(this);
String myString = "Some text [clickable]";
int i1 = myString.indexOf("[");
int i2 = myString.indexOf("]");
myTextView.setMovementMethod(LinkMovementMethod.getInstance());
myTextView.setText(myString, BufferType.SPANNABLE);
Spannable mySpannable = (Spannable)myTextView.getText();
ClickableSpan myClickableSpan = new ClickableSpan() {
@Override
public void onClick(View widget) { /* do something */ }
};
mySpannable.setSpan(myClickableSpan, i1, i2 + 1, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
Объединение
не является структурой
. В объединении
все данные занимают одно и то же пространство и могут рассматриваться как разные типы через имена полей. Когда вы назначаете true
для x.b
, вы перезаписываете младшие биты 20000
.
Более конкретно:
20000 в двоичном формате: 100111000100000
19969 в двоичном формате: 100111000000001
Здесь произошло то, что вы поместили однобайтовое значение 1 (00000001) в 8 младших битов 200000.
Если вы используете struct
вместо union
, у вас будет место как для int
, так и для bool
, а не просто int
, и вы увидите ожидаемые результаты.
В объединении все члены данных начинаются с одной и той же области памяти. В вашем примере вы можете использовать только один член данных за один раз. Однако эта возможность может быть использована для некоторых изящных трюков, например, для предоставления одних и тех же данных несколькими способами:
union Vector3
{
int v[3];
struct
{
int x, y, z;
};
};
Что позволяет вам получить доступ к трем целым числам либо по имени (x, y и z), либо как к массиву (v).
Союз хранит только одного члена в любой момент времени. Чтобы получить определенные результаты, вы можете прочитать только один и тот же член из объединения, которое было записано последним в объединение. Поступление иначе (как вы здесь) официально не дает ничего, кроме неопределенных результатов.
Иногда объединения намеренно используются для обозначения типов (например, для просмотра байтов, составляющих число с плавающей точкой). В этом случае вам решать, что вы получаете. Язык вроде как пытается дать вам шанс, но не может гарантировать многого.