やりたいこと
以下のレイアウトで、TextViewをクリックした時にRelativeLayoutのクリック処理を呼ぶ方法を調べます。
- RelativeLayout
-
- LinearLayout
-
-
- TextView
-
前提
レイアウトの重複部分をクリックすると、一番上のレイアウトに対して実装されている処理だけが実行されます。
つまり、以下のように各レイアウトに処理を実装しても、TextViewをクリックした場合はTextViewの処理のみ実行されます。(onTouchを実装した場合は異なります。)
MainActivity.java
TextView textView = (TextView) findViewById(R.id.textView);
LinearLayout linearLayout = (LinearLayout) findViewById(R.id.linearLayout);
RelativeLayout relativeLayout = (RelativeLayout) findViewById(R.id.relativeLayout);
relativeLayout.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
System.out.println("RelativeLayout");
}
});
linearLayout.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
System.out.println("LinearLayout");
}
});
textView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
System.out.println("textView");
}
});
前提の実装確認
TextViewの部分(SAMPLE001)をクリックした時:
consoleにtextViewだけが表示される。
この時に、RelativeLayoutのonClickを呼ぶようにします。
検証
TextViewの実装を以下の通り変更するだけです。
MainActivity.java
textView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
System.out.println("textView");
RelativeLayout grandParent = (RelativeLayout) v.getParent().getParent();</font>
grandParent.callOnClick();
}
});
クリックされたViewの親要素を取得します。
取得した親要素に対して
grandParent.callOnClick();
このようにクリックイベントを発生させれば良いだけです。
consoleに以下の二つが表示されました。
textView
RelativeLayout
簡単でした。
次はonTouchの場合について書きたいと思いまーす。