2015年3月28日土曜日

[Android] LayoutInflaterを使って他のアクティビティのViewにアクセスする

LayoutInflaterを使うことで他のアクティビティのViewにアクセスできます(もちろん自分自身のActivity内で複数のレイアウト(XML)を使うこともできます)。

MainActivityとSubActivityの二つのアクティビティがあるとします。ここでMainActivityが使用するレイアウト(XML)をR.layout.main.xml、SubActivityで使用するレイアウト(XML)をR.layout.sub.xmlとします。それぞれのXMLを示します。
main.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools">
<FrameLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/main"
android:text="MainTextView" />
</FrameLayout>
sub.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools">
<FrameLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/sub" />
</FrameLayout>
ここで、SubActivityからR.layout.main.xmlのTextView(R.id.main)にアクセスするにはLayoutInflaterを使って次のようにします。
public class SubActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// 定石通り、まずは自分のレイアウトを設定する
// ちなみにこの処理をしなくてもmain.xmlのViewにアクセス可能
setContentView(R.layout.sub);
// LayoutInflaterを使ってmain.xmlのTextViewにアクセスする
LayouttInflater layoutInflater = LayoutInflater.from(this);
// main.xml(を表現するView)を取得
View mainLayoutView = layoutInflater.inflate(R.layout.main, null);
// main.xml内のTextView(R.id.main)を取得
TextView mainTextView = (TextView)mainLayoutView.findViewById(R.id.main);
// 取得したTextViewのtextを取得
String mainText = mainTextView.getText();
Log.d("main.xmlのTextViewの値:", mainText);
// logcatには以下のように出力される
// main.xmlのTextViewの値:MainTextView
}
}
view raw gistfile1.java hosted with ❤ by GitHub
この方法を活用すると、この例のように他のアクティビティのViewにアクセスするだけでなく、ボタン押下のタイミングで異なるレイアウトを切り替えたり、ヘッダ、フッタのような共通レイアウトの使用を行うことができます。

0 件のコメント:

コメントを投稿