【Android】OnClickListenerから親要素のViewをたどってみる

2016-08-25

【Android】OnClickListenerから親要素のViewをたどってみる

このエントリーをはてなブックマークに追加

例えば下記のようなコードで、textViewの中身を変更したいみたいな時があった場合、自身の親からViewをたどることが出来る。

class MainActivity extends Activity {

    Button mBtn;
    TextView textView;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        textView = (TextView) findViewById(R.id.textView);
        mBtn = (Button) findViewById(R.id.btn1);
        mBtn.setOnClickListener(buttonListener);
    }

    private OnClickListener buttonListener = new OnClickListener() {
        @Override
        public void onClick(View v) {
        }
    };

}

実装方法

やり方としては、下記のようにViewGroupを取得して子ビューを探していけばいい

private OnClickListener buttonListener = new OnClickListener() {
    @Override
    public void onClick(View v) {
        TextView textView = null;
        ViewGroup vg = (ViewGroup) v.getParent();
        for (int i = 0 ; i < vg.getChildCount() ; i++) {
            View view = vg.getChildAt(i);
            if (view instanceof TextView) {
                textView = (TextView) view;
                break;
            }
        }
        if (textView != null) 
            textView.setText("テキストを変更");
    }
};

特にループして全て見る必要はないので、順番が決まっていたら 「textView = (TextView) vg.getChildAt(0);」 みたいにして取得してもいいと思う。 それなりにタッチしたViewの隣のViewの内容を変更したいときは多いと思うので覚えておくとベンリ