SQLの窓

2016年07月25日

Android Studio で Fragment の tools:layout で画面を指定して MainActivity には処理を書かないアプリケーション

以下がボタンの画面定義ですが、<Fragment> で使用されます。
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:orientation="horizontal"
              android:layout_width="match_parent"
              android:layout_height="match_parent">

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="ボタン1"
        android:id="@+id/button"
        android:layout_weight="1"/>

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="ボタン2"
        android:id="@+id/button2"
        android:layout_weight="1"/>

</LinearLayout>
この定義は、二つのフラグメントで使用されます。
public class Buttons extends Fragment {

	@Nullable
	@Override
	public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

		View view = inflater.inflate(R.layout.buttons, container, false);

		// **************************
		// 上段左ボタンの処理
		// **************************
		view.findViewById(R.id.button).setOnClickListener(new View.OnClickListener() {
			@Override
			public void onClick(View v) {
				EditText et = (EditText) getActivity().findViewById(R.id.editText);
				et.setText("最初のフラグメントから、一つ目のボタンを使う");
			}
		});

		// **************************
		// 上段右ボタンの処理
		// **************************
		view.findViewById(R.id.button2).setOnClickListener(new View.OnClickListener() {
			@Override
			public void onClick(View v) {

				// **************************
				// 別のフラグメントへのアクセス
				// **************************
				// フラグメントマネージャを取得して
				FragmentManager fm = getFragmentManager();
				// 目的のフラグメントを取得
				Fragment target = fm.findFragmentById(R.id.fragment2);
				if ( target != null ) {
					// その View を取得して
					View view = target.getView();
					// 中のコンテンツを取得する
					Button button = (Button) view.findViewById(R.id.button);
					// 下段の左ボタンのテキストを赤に
					button.setTextColor(Color.parseColor("#FF0000"));
				}

			}
		});

		return view;

	}

}


二つ目です
public class Buttons2 extends Fragment {

	@Nullable
	@Override
	public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

		View view = inflater.inflate(R.layout.buttons, container, false);

		// **************************
		// 下段左ボタンの処理
		// **************************
		view.findViewById(R.id.button).setOnClickListener(new View.OnClickListener() {
			@Override
			public void onClick(View v) {
				EditText et = (EditText) getActivity().findViewById(R.id.editText2);
				et.setText("二つ目のフラグメントから、一つ目のボタンを使う");
			}
		});

		// **************************
		// 下段右ボタンの処理
		// **************************
		view.findViewById(R.id.button2).setOnClickListener(new View.OnClickListener() {
			@Override
			public void onClick(View v) {

				// **************************
				// 別のフラグメントへのアクセス
				// **************************
				// フラグメントマネージャを取得して
				FragmentManager fm = getFragmentManager();
				// 目的のフラグメントを取得
				Fragment target = fm.findFragmentById(R.id.fragment);
				if ( target != null ) {
					// その View を取得して
					View view = target.getView();
					// 中のコンテンツを取得する
					Button button = (Button) view.findViewById(R.id.button);
					// 上段の左ボタンのテキストを赤に
					button.setTextColor(Color.parseColor("#FF0000"));
				}

			}
		});

		return view;

	}
}


以下は、MainActivity で使用される画面です
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="lightbox.june.fragmenttest.MainActivity">

    <ScrollView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/scrollView">

        <LinearLayout
            android:orientation="vertical"
            android:layout_width="match_parent"
            android:layout_height="match_parent">

            <fragment
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:name="lightbox.june.fragmenttest.Buttons"
                android:id="@+id/fragment"
                tools:layout="@layout/buttons"/>

            <EditText
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:id="@+id/editText"/>

            <fragment
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:name="lightbox.june.fragmenttest.Buttons2"
                android:id="@+id/fragment2"
                tools:layout="@layout/buttons"/>

            <EditText
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:id="@+id/editText2"/>

        </LinearLayout>
    </ScrollView>

</RelativeLayout>

ボタンの各処理は、フラグメントで処理され、activity_main のコンテンツは getActivity().findViewById で取得します。フラグメントから、他のフラグメントのアクセスは、

1) getFragmentManager()
2) findFragmentById()
3) getView()
4) findViewById()

と、順に取得します



【Androidの最新記事】
posted by at 2016-07-25 20:28 | Comment(0) | Android | このブログの読者になる | 更新情報をチェックする
SQLの窓全体の検索
Custom Search
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

※ブログオーナーが承認したコメントのみ表示されます。


Android SDK ポケットリファレンス
改訂版 Webデザイナーのための jQuery入門
今すぐ使えるかんたん ホームページ HTML&CSS入門
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX